【发布时间】:2011-09-06 19:08:34
【问题描述】:
我很困惑为什么我们需要将void 传递给 C 函数:
int f(void) { return 0; }
对
int f() { return 0; }
什么是正确的做法,为什么?
【问题讨论】:
标签: c
我很困惑为什么我们需要将void 传递给 C 函数:
int f(void) { return 0; }
对
int f() { return 0; }
什么是正确的做法,为什么?
【问题讨论】:
标签: c
在 C 中,int f() 是旧式声明。它说f 需要一个固定但未指定数量和类型的参数。例如,给定int f() { return 0; },编译器不会抱怨f(42) 或f("hello, world")(尽管此类调用的行为未定义)。
int f(void) 明确表示f 不接受任何参数。
(C++ 有不同的规则;Stroustrup 并不关心与旧 C 代码的向后兼容性。)
【讨论】:
这是C的遗迹。
f(void) 没有参数,所以f(1) 无效。
f()表示参数未指定,所以f(1)在这里有效。
【讨论】:
f 的定义 没有指定任何参数,那么f(1) 的行为是未定义的。如果没有原型,则完全由程序员来确定参数的数量和类型是否正确。
在这种情况下,void 仅表示“没有参数”。我不确定您的第二种情况是否会编译,但无论哪种方式,我都希望第一种情况尽可能清楚。当然,在调用f时,只需使用空括号即可:
int x = f();
【讨论】: