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

我最近不得不input一个小的Ctesting程序,在这个过程中,我在主函数中犯了一个拼写错误,意外地使用了vooid而不是void

但它仍然工作。

把它缩小到最小的完整版本,我结束了:

 int main (vooid) { return 42; } 

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

这个有效的代码究竟是多less?


这是从我的bash shell中剪切和粘贴的成绩单,以显示我在做什么:

 pax$ cat qq.c int main (vooid) { return 42; } pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq pax$ echo $? 42 

它只是使用“旧式”函数声明语法; 你隐式声明了一个叫做vooidint参数。

这是有效的代码,因为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

在C中,函数参数的默认types是int 。 所以,你的程序将vooid这个单词当作int main(int vooid) ,这是完全有效的代码。

它只是gcc -std=c89 -Wall -o qq qq.cgcc -std=gnu89 -Wall -o qq qq.c不会发出警告。 所有其他标准都会发出关于vooid隐式typesintvooid

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

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

我在Debiantesting系统上testing了gcc 4.4.5。