之前的答案非常正确,但我链接到 David Tribble 的优秀页面,因为它对这个问题和许多其他问题给出了很好的解释。
亮点:
C 区分使用空参数列表声明的函数和使用仅包含 void 的参数列表声明的函数。前者是一个带有未指定数量参数的非原型函数,而后者是一个不带参数的原型函数。
另一方面,C++ 不区分这两个声明,并认为它们都意味着一个不带参数的函数。
对于打算编译为 C 或 C++ 的代码,此问题的最佳解决方案是始终使用显式 void 原型声明不带参数的函数。
空函数原型在 C99 中是一个弃用的特性(就像在 C89 中一样)。
可能值得注意的是 func(void) 语法在 C++ 中并未被弃用,但它通常被认为更像是一种 C 风格的习语。我认为我遇到的大多数 C++ 程序员都喜欢空参数列表。
引用 C++ 标准,第 8.3.5 节,第 2 段:
“如果 parameter-declaration-clause 为空,则函数不接受任何参数。参数列表 (void) 等效于空参数列表。除了这种特殊情况,void 不应是参数类型(尽管类型派生自 void ,如void*,可以)。”
没有提到任何一种形式都已被弃用。再次感谢 Tribble 先生出色的网站将我指向标准的正确部分。