我在C/C++中看到过一些代码如下:
void Main(void)
Run Code Online (Sandbox Code Playgroud)
和
int Main(void)
Run Code Online (Sandbox Code Playgroud)
这是什么原因:为什么它不是一个参数,而是在void/int等名称之后的括号中使用?
void在参数列表中实际上是一个关键字,而不是指定任何类型.它存在的原因纯粹是历史的.
早期的C没有函数原型或参数列表的任何语法.函数定义如下所示:
foo()
int x; // These are the parameters.
float y;
{
return x + (int) y;
}
Run Code Online (Sandbox Code Playgroud)
对于原型"没有必要",因为编译器会假设每个调用都传递了正确的类型和参数数量.这很容易出错.此外,假设返回类型int,这是一个更脆弱的假设.第一个原型只指定了返回类型.
float foo(); // Still no parameters.
Run Code Online (Sandbox Code Playgroud)
当float foo( int x, float y )引入熟悉的语法时,保留了与前一样式的向后兼容性.该void关键字用于区分不确定(缺失)参数列表和空参数列表.
在C,float foo()并float foo( void )意味着不同的事情,这一天.
在C++中,不支持不确定的参数列表,并且float foo( void )是不鼓励但不推荐使用的同义词float foo().
此外,C++允许模板确定参数的类型,但是(void)通过模板生成参数列表是一个错误.