在C语言中:func(void)与func()有何区别?

19
当一个C函数不接受任何参数时,根据语言规则,它是否必须使用“void”参数声明/定义?PC-Lint似乎在参数列表中没有任何内容时会出现问题,我想知道这是否与我不了解的语言语法有关。 编辑: 我刚刚找到了一个重复的问题,在“C void arguments”中有更多的答案和解释。
2个回答

37

void表示函数不接受任何参数。例如:

int init (void)
{
    return 1;
}

这不同于定义变量

int init ()
{
    return 1;
}

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


7
据我所知,C语言中的func(void)声明了一个不带参数的函数,而func()声明了一个可以接受任意数量参数的函数。我认为后者是来自于ANSI C之前的遗物。
根据维基百科上这里的说法,func()的声明基本上是声明了一个“没有关于参数的信息”的函数。

一个接受任意数量参数的函数不是被定义为 func(...) 吗? - noamtm
2
你是正确的,在K&R C中,参数列表被定义得不同(而且很差)。但在C ++中,f()与f(void)相同。 - H H
2
@noamtm - 形如func(a, b, ...)的函数声明了一个接受可变参数列表的C函数,因此从某种意义上说,它也可以接受任意数量的参数。 - Timo Geusch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接