代码崩溃编译器:main()返回一个struct而不是int

And*_*aKo 5 c crash compiler-errors visual-studio-2008 visual-c++

我正在尝试一段C代码.任何人都可以告诉我为什么VC 9.0与SP1崩溃对我来说?哦,代码是一个用于讨论为什么类似的例子

 void main (void)
Run Code Online (Sandbox Code Playgroud)

是邪恶的.

struct foo { int i; double d; } main (double argc, struct foo argv)
{

    struct foo a;
    a.d=0;
    a.i=0;
    return a.i;
}
Run Code Online (Sandbox Code Playgroud)

如果我放

return a;
Run Code Online (Sandbox Code Playgroud)

编译器不会崩溃.

Jer*_*fin 3

该代码给出了未定义的行为。这并不要求编译器崩溃,它只是说你基本上已经违反了规则,所以无论发生什么,编译器都没有做错任何事情。

编辑:也就是说,作为实现质量问题,编译器崩溃基本上没有任何借口,这是绝对正确的 - 合理地说,它应该始终正常退出,无论您提供什么数据。

  • 我记得在某处读到过有关“黑客”C 编译器的内容,该编译器在成功时不会输出任何内容,但在*任何*错误时只会输出“否”。 (6认同)
  • 糟糕的代码永远不应该使编译器崩溃。如果程序本身由于未定义的行为而崩溃则另当别论。 (3认同)