在函数参数中使用void

Kan*_*hk 7 c

可能重复:
C void参数

刚开始用C而我找不到答案...

两者之间有什么区别吗?

int foo() { }

int foo(void) { }
Run Code Online (Sandbox Code Playgroud)

我应该选择哪个?为什么?

请注意,这个问题也适用于:int main.它应该是:int main或者int main(void)当我不想要任何命令行参数时.

pax*_*blo 15

根据标准,main有两种规范形式(参见C99第5.1.2.2.2节"程序启动"):

int main (void);
int main (int argc, char *argv[]); // or equivalent such as char **argv
Run Code Online (Sandbox Code Playgroud)

其他人是特别允许的,但那些是必需的.

至于fn(void)和之间的首选形式fn(),我更喜欢前者,因为我喜欢明确说明没有参数.

还有一个微妙的区别.C99第6.7.5.3节"函数声明者"第10段规定:

void类型的未命名参数作为列表中唯一项的特殊情况指定该函数没有参数.

同一节的第14段显示了唯一的区别:

标识符列表仅声明函数参数的标识符.函数声明符中的空列表是该函数定义的一部分,指定该函数没有参数.函数声明符中的空列表不是该函数定义的一部分,它指定不提供有关参数数量或类型的信息.

换句话说,这意味着相同void的功能的定义,但也并不意味着在一个独立的声明符(即,原型).int fn();意味着没有关于参数的信息,但int fn(void);意味着没有参数.

这意味着:

int fn();
int fn (int x) { return x; }
int main (void) { return fn(0); }
Run Code Online (Sandbox Code Playgroud)

有效但是:

int fn(void);
int fn (int x) { return x; }
int main (void) { return fn(0); }
Run Code Online (Sandbox Code Playgroud)

不是.