C 或 C 中的 foo(void) 和 foo() 有区别吗?

新手上路,请多包涵

考虑这两个函数定义:

 void foo() { }

void foo(void) { }

这两者有什么区别吗?如果不是,为什么 void 参数在那里?审美原因?

原文由 Landon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 804
2 个回答

C 中:

  • void foo() 表示“一个函数 foo 采用未指定数量的未指定类型的参数”
  • void foo(void) 意思是“一个函数 foo 不带参数”

C++ 中:

  • void foo() 意思是“一个函数 foo 不带参数”
  • void foo(void) 表示“一个函数 foo 不带参数”

因此,通过编写 foo(void) ,我们在两种语言之间实现了相同的解释并使我们的标题多语言(尽管我们通常需要对标题做更多的事情以使它们真正跨语言;即包装它们在 extern "C" 如果我们正在编译 C++)。

原文由 DrPizza 发布,翻译遵循 CC BY-SA 3.0 许可协议

我知道您的问题与 C++ 相关,但是当涉及到 C 时,可以在 K&R 中找到答案,第 72-73 页:

此外,如果函数声明不包含参数,如

double atof();

这也被认为意味着对 atof 的论点没有任何假设;关闭所有参数检查。空参数列表的这种特殊含义旨在允许旧的 C 程序使用新的编译器进行编译。但是将它与新程序一起使用是个坏主意。如果函数接受参数,则声明它们;如果不带参数,请使用 void。

原文由 Kyle Cronin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题