为什么函数原型中没有参数是首选

Why is no argument in a function prototype preferred?

本文关键字:参数 函数 原型 为什么      更新时间:2023-10-16

我有一个关于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)表示法,以确保两个编译器看到相同的规范

偏好什么和什么是好的实践是完全不同的。我相信这只是程序员的选择。