“int main(void)”?这是如何运作的?

时间:2011-02-13 22:40:55

标签: c syntax main

我最近不得不输入一个小的C测试程序,在这个过程中,我在主函数中意外地使用vooid而不是void拼错了。

然而它仍然奏效。

将其降低到最小的完整版本,我最终得到了:

int main (vooid) {
    return 42;
}

确实编译(gcc -Wall -o myprog myprog.c),运行时返回42。

这个有效的代码究竟是什么?


这是我的bash shell剪切并粘贴的成绩单,以显示我正在做的事情:

pax$ cat qq.c
int main (vooid) {
    return 42;
}

pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq

pax$ echo $?
42

4 个答案:

答案 0 :(得分:218)

它只是使用“旧式”函数声明语法;您隐式声明了名为int的{​​{1}}参数。

答案 1 :(得分:67)

这是有效的代码,因为myprog.c包含:

int main (vooid) // vooid is of type int, allowed, and an alias for argc
{     
  return 42; // The answer to the Ultimate Question
} 

vooid包含一个加上传递的参数数量(即argc)。因此,实际上您所做的就是将argc重命名为vooid

答案 2 :(得分:23)

在C中,函数参数的默认类型是int。因此,您的计划将vooid一词视为int main(int vooid),这是完全有效的代码。

答案 3 :(得分:19)

gcc -std=c89 -Wall -o qq qq.cgcc -std=gnu89 -Wall -o qq qq.c不会发出警告。所有其他标准都会针对int的隐式类型vooid发出警告。

int main(chart)的行为与int main (vooid)的行为方式相同。

return vooid;返回命令行参数的数量。

我在Debian测试系统上使用gcc 4.4.5进行了测试。