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

标签 c++ c void

<分区>

我看到一些 C/C++ 代码是这样的:

void Main(void)

int Main(void)

这样做的原因是什么:为什么它不是参数而是用在void/int e.t.c名称后面的括号中?

最佳答案

参数列表中的

void 实际上是一个关键字,不指定任何内容的类型。它存在的原因纯粹是历史原因。

早期的 C 没有函数原型(prototype)或任何参数列表语法。函数定义如下所示:

foo()
int x; // These are the parameters.
float y;
{
    return x + (int) y;
}

“不需要”原型(prototype),因为编译器会假设每次调用都传递了正确的参数类型和数量。这很容易出错。此外,返回类型被假定为 int,这是一个更脆弱的假设。第一个原型(prototype)仅指定返回类型。

float foo(); // Still no parameters.

当引入熟悉的 float foo( int x, float y ) 语法时,保留了与先前样式的向后兼容性。 void 关键字用于区分不确定(缺失)参数列表和空参数列表。

在 C 中,float foo()float foo( void ) 至今有不同的含义。

在 C++ 中,不支持不确定的参数列表,并且 float foo( void )float foo() 的同义词,但并未弃用。

此外,C++ 允许模板确定参数的类型,但通过模板生成(void) 参数列表是错误的。

关于c++ - C/C++ - (void) 如何不用作参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20016110/

相关文章:

c++ - 指针算术题(数组大小)[C++]

c++ - 当内存被其他对象使用时不要删除ptr

c++ - 实例变量值无法正确打印

c - VS 2015 中的 std::wcstok

java - 我无法弄清楚为什么我的程序的一部分在继续执行下一个语句之前循环了 4 次

C++链表实现

c - 我的 Avro-C 安装在哪里?

c - 使用递归在c中插入BST

Java - 错误消息 : 'Cannot Convert from void to String

php - 在 PHP 中返回 void 和 null 有区别吗?