我最近不得不输入一个小的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发布于 2011-02-14 06:44:29
它只是使用了“老式”的函数声明语法;您隐式地声明了一个名为vooid的int参数。
发布于 2011-02-14 06:45:18
这是有效的代码,因为myproc.c包含:
int main (vooid) // vooid is of type int, allowed, and an alias for argc
{
return 42; // The answer to the Ultimate Question
} vooid包含1加上传递的参数数量(即argc)。因此,实际上您所做的就是将argc重命名为vooid。
发布于 2011-02-14 06:49:11
在C中,函数参数的默认类型是int。因此,您的程序将单词vooid视为int main(int vooid),这是完全有效的代码。
https://stackoverflow.com/questions/4987415
复制相似问题