19

当 C 函数不接受任何参数时,语言规则是否必须使用“void”参数声明/定义它?当参数列表中什么都没有时,PC-Lint 似乎有问题,我想知道这是否是我不知道的语言语法中的某些东西。

编辑:我刚刚发现了一个重复的(back-dupe?它首先出现)问题,C void arguments,它有更多的答案和解释。

4

2 回答 2

36

void 表示该函数不带任何参数。例如,

int init (void)
{
    return 1;
}

这与定义不同

int init ()
{
    return 1;
}

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

于 2009-07-22T08:45:29.247 回答
7

C 中的 IIRC func(void) 将声明一个不带参数的函数,而 func() 声明一个将带任意数量参数的函数。我相信后者是来自 pre-ANSI C 的产物。

根据此处的维基百科,声明 func() 基本上确实声明了“没有有关参数的信息”的函数。

于 2009-07-22T08:40:01.363 回答