C/C++ - 如何(void)不用作参数?

Joe*_*Joe 0 c c++ void

我在C/C++中看到过一些代码如下:

void Main(void)
Run Code Online (Sandbox Code Playgroud)

int Main(void)
Run Code Online (Sandbox Code Playgroud)

这是什么原因:为什么它不是一个参数,而是在void/int等名称之后的括号中使用?

Pot*_*ter 7

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)通过模板生成参数列表是一个错误.