“INT Main(Void)”?那是怎么回事?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

最近我不得不输入一个小的C测试程序,在这个过程中,我在主函数中不小心使用了一个拼写错误。vooid代替void.

但它仍然有效。

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

int main (vooid) {
    return 42;
}

这确实是确实汇编(gcc -Wall -o myprog myprog.c),当运行时,它返回42。

这是从我的bash展示我在做什么:

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

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

pax$ echo $?
42
提问于
用户回答回答于

它只是使用“旧样式”函数声明语法;正在隐式地声明int参数调用vooid.

用户回答回答于

它是有效的代码,因为mypr.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)。所以,实际上你所做的就是重命名argcvooid.

扫码关注云+社区