为什么首选函数原型中没有参数?
Why is no argument in a function prototype preferred?
我对 C++ 中的编码风格有疑问。
我更喜欢在函数原型中明确使用 void
。
但是,在阅读维基百科中关于 void
type 的文章时,我发现最好不要在函数原型中给出参数。
- 为什么原型中没有参数是首选?
很好奇有没有具体的原因
什么是首选和什么是好的做法是完全不同的。我相信这只是程序员的选择。
C++ 在 C 之前有函数原型,C++ 有 'always' 必需的有效原型。因此,空括号(圆括号)表示没有参数没有任何问题或歧义。
相比之下,C 在 C++ 拥有函数原型很久之后才获得函数原型,并且它有一个遗留基础需要处理。在引入函数原型之前,具有 non-integer return 类型的 C 函数必须声明为:
double sin();
char *malloc(); /* There wasn't void * -- or C++ style // comments */
struct whatnot *new_whatnot();
C 标准化委员会无力破坏所有现有的 C 代码;该标准将失败。因此,C 标准制定者采用 sometype function(void)
来明确指示 'no arguments'。直到今天,sometype function()
意味着 'a function returning a sometype
value taking an undefined (but not variable) number of arguments of undefined type'。
因为 C++ 有空括号(空圆括号)表示法,所以不需要 (void)
表示法,但它被添加到 C++ 中以匹配 C 标准并使代码在标准之间更容易迁移C 和 C++。
- 本机为 C++ 编写的代码应该使用本机的空括号表示法。
- 为 C 原生编写的代码必须 使用明确的
(void)
符号,因为空括号意味着完全不同的东西(并且相对不受欢迎)。
- 编写为可在 C 和 C++ 之间迁移的代码可以使用显式
(void)
表示法来确保两个编译器看到相同的规范。
我对 C++ 中的编码风格有疑问。
我更喜欢在函数原型中明确使用 void
。
但是,在阅读维基百科中关于 void
type 的文章时,我发现最好不要在函数原型中给出参数。
- 为什么原型中没有参数是首选?
很好奇有没有具体的原因
什么是首选和什么是好的做法是完全不同的。我相信这只是程序员的选择。
C++ 在 C 之前有函数原型,C++ 有 'always' 必需的有效原型。因此,空括号(圆括号)表示没有参数没有任何问题或歧义。
相比之下,C 在 C++ 拥有函数原型很久之后才获得函数原型,并且它有一个遗留基础需要处理。在引入函数原型之前,具有 non-integer return 类型的 C 函数必须声明为:
double sin();
char *malloc(); /* There wasn't void * -- or C++ style // comments */
struct whatnot *new_whatnot();
C 标准化委员会无力破坏所有现有的 C 代码;该标准将失败。因此,C 标准制定者采用 sometype function(void)
来明确指示 'no arguments'。直到今天,sometype function()
意味着 'a function returning a sometype
value taking an undefined (but not variable) number of arguments of undefined type'。
因为 C++ 有空括号(空圆括号)表示法,所以不需要 (void)
表示法,但它被添加到 C++ 中以匹配 C 标准并使代码在标准之间更容易迁移C 和 C++。
- 本机为 C++ 编写的代码应该使用本机的空括号表示法。
- 为 C 原生编写的代码必须 使用明确的
(void)
符号,因为空括号意味着完全不同的东西(并且相对不受欢迎)。 - 编写为可在 C 和 C++ 之间迁移的代码可以使用显式
(void)
表示法来确保两个编译器看到相同的规范。