考虑这两个函数定义:
void foo() { }
void foo(void) { }
这两者有什么区别吗?如果不是,为什么 void
参数在那里?审美原因?
原文由 Landon 发布,翻译遵循 CC BY-SA 4.0 许可协议
我知道您的问题与 C++ 相关,但是当涉及到 C 时,可以在 K&R 中找到答案,第 72-73 页:
此外,如果函数声明不包含参数,如
double atof();
这也被认为意味着对 atof 的论点没有任何假设;关闭所有参数检查。空参数列表的这种特殊含义旨在允许旧的 C 程序使用新的编译器进行编译。但是将它与新程序一起使用是个坏主意。如果函数接受参数,则声明它们;如果不带参数,请使用 void。
原文由 Kyle Cronin 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
在 C 中:
void foo()
表示“一个函数foo
采用未指定数量的未指定类型的参数”void foo(void)
意思是“一个函数foo
不带参数”在 C++ 中:
void foo()
意思是“一个函数foo
不带参数”void foo(void)
表示“一个函数foo
不带参数”因此,通过编写
foo(void)
,我们在两种语言之间实现了相同的解释并使我们的标题多语言(尽管我们通常需要对标题做更多的事情以使它们真正跨语言;即包装它们在extern "C"
如果我们正在编译 C++)。