【发布时间】:2019-01-01 11:56:24
【问题描述】:
我只是想看看如果我将return 0 语句与void main() 一起使用会发生什么。我原以为编译器会给出一个错误,但它只是给出一个警告并成功执行了程序,但最后返回了一些非零值,现在我怀疑为什么程序执行时没有错误,然后当我返回一些值时用过void main()?
#include<stdio.h>
void main()
{
printf("Hello World\n");
return 0;
}
【问题讨论】:
-
这个程序不是有效的 C 程序。任何编译它的 C 编译器都是按照“grabage in - garbage out”的原则来做的。行为未定义。所以,无论你“成功执行”什么,都与 C 语言无关。
-
@AnT:这不是 undefined 行为。 C99 规范指出允许符合要求的实现来执行此操作,并要求它是实现定义的 行为。如果您不清楚其中的区别,请进行网络搜索,一切都会变得清晰。
-
@AnT 是的,一些编译器允许
void main并且没有任何问题,如果您不关心返回值,这只是一个捷径。埃里克是对的 -
@Eric Lippert:绝对错误!究竟“允许做什么”什么?在所有 C 编译器中,
void函数中的return 0是约束冲突。没有例外。每个 C 编译器都需要对此代码发出诊断。之后,行为未定义。未定义实现,但明确未定义。