为什么函数原型中没有参数是首选
Why is no argument in a function prototype preferred?
我有一个关于C++中编码风格的问题。
我更喜欢在函数原型中显式地使用void
。
然而,在阅读维基百科上一篇关于void
类型的文章时,我发现在函数原型中不给出任何参数是可取的。
- 为什么原型中没有参数是首选
我很好奇是否有具体的原因。
C++在C之前就有函数原型,而C++实际上"总是"有所需的原型。因此,空括号(圆括号)意味着没有自变量,不存在任何问题或歧义。
相比之下,C直到C++拥有函数原型很久之后才获得它们,而且它有一个遗留的基础需要处理。在引入函数原型之前,具有非整数返回类型的C函数必须声明为:
double sin();
char *malloc(); /* There wasn't void * -- or C++ style // comments */
struct whatnot *new_whatnot();
C标准化委员会不能破坏所有现有的C代码;标准会失败的。因此,C标准化器采用sometype function(void)
来明确表示"无参数"。时至今日,sometype function()
的意思是"返回sometype
值的函数,该值采用未定义(但不是可变)数量的未定义类型的参数"。
因为C++有空括号(空括号)表示法,所以不需要(void)
表示法,但它被添加到C++中,以匹配C标准,并使在标准C和C++之间迁移代码变得更容易。
- 为C++编写的本机代码应该使用本机空括号表示法
- 本机为C编写的代码必须使用显式
(void)
表示法,因为空括号的含义完全不同(而且相对不可取) - 编写为可在C和C++之间迁移的代码可能会使用显式
(void)
表示法,以确保两个编译器看到相同的规范
偏好什么和什么是好的实践是完全不同的。我相信这只是程序员的选择。
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类