我对为什么需要将 void
传递给 C 函数感到困惑:
int f(void) { return 0; }
对比
int f() { return 0; }
什么是正确的事情以及为什么?
我对为什么需要将 void
传递给 C 函数感到困惑:
int f(void) { return 0; }
对比
int f() { return 0; }
什么是正确的事情以及为什么?
在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)
是有效的。
void
只是表示“没有参数”。我不确定你的第二个案例是否会编译,但无论如何,我更喜欢第一个案例尽可能清晰明了。当然,在调用f
时,只需使用空括号即可:int x = f();
f
的定义没有指定任何参数,则f(1)
的行为是未定义的。如果没有原型,完全由程序员来确保参数的数量和类型正确。 - Keith Thompson