在c:func(void)与func()

noa*_*mtm 18 c lint function void

当C函数不接受任何参数时,是否必须通过语言规则使用"void"参数声明/定义它?当参数列表中没有任何内容时,PC-Lint似乎有问题,我想知道它是否是我不知道的语言语法中的东西.

编辑:我刚发现一个重复的(后面的傻瓜?它首先出现)问题,C void参数,它有更多的答案和解释.

dfa*_*dfa 34

void表示函数不接受任何参数.例如,

int init (void)
{
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

这与定义不同

int init ()
{
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

因为在第二种情况下,编译器不会检查函数是否真的被调用而根本没有参数; 相反,将接受具有任意数量参数的函数调用,而不会发出任何警告(这仅用于与旧式函数定义语法(ANSI之前的兼容性)实现).


Tim*_*sch 7

C中的IIRC func(void)将声明一个不带参数的函数,而func()声明一个将接受任意数量参数的函数.我相信后者是来自ANSI C之前的工件.

根据Wikipedia这里,声明func()基本上声明了函数"没有关于参数的信息".

  • 您认为正确,在K&R C参数列表中定义的不同(并且很差).但在C++中,f()与f(void)相同 (2认同)
  • @noamtm - 形式为func(a,b,...)的函数; 声明一个C函数,它接受一个变量参数列表,因此在某种意义上也可以使用任意数量的参数. (2认同)