“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
它只是使用“旧式”函数声明语法; 你隐式声明了一个叫做vooid
的int
参数。
这是有效的代码,因为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.c
和gcc -std=gnu89 -Wall -o qq qq.c
不会发出警告。 所有其他标准都会发出关于vooid
隐式typesint
的vooid
。
int main(chart)
行为与int main (vooid)
行为相同。
return vooid;
返回命令行参数的数量。
我在Debiantesting系统上testing了gcc 4.4.5。