2012-10-17 34 views
10

我有一些C程序,而不从主任何明确的回报,这样的:GCC默认的主返回值不为零

int main(int argc, char *argv[]) 
{ 
    // blah blah 
} 

如果我用GCC 4.6.3编译并以下选项:

gcc file.c -Wall -Wextra 

程序不返回0,给我的问题,但标准(以及让很多其他的答案)说:

如果返回类型主函数的类型与int兼容,从初始调用返回主函数相当于调用主函数返回的值作为参数的退出函数; [10] 到达终止主函数返回值为0。如果返回类型与int不兼容,则返回到主机环境的终止状态未指定。

[10]根据6.2.4,在主声明的自动存储持续时间的对象的生存期将在前者的情况下已经结束,即使他们不会在后者有。

我的程序返回不同的值,160,15,14 ...垃圾?

我错过了什么吗?这是一个GCC错误?在GCC在线文档中找不到任何内容。 GCC仍然指的是一些旧的C标准(C99之前),这可能不被指定?

+3

用'-std = c99'编译它。 –

+0

我会尽力,谢谢。 – effeffe

+0

@BlueMoon:更好的是,在'main'的末尾添加一个'return 0;'。在C99模式下它是无害的。 –

回答

13

默认gcc-std=gnu89是C90 + GNU扩展。

和C90说:

(C90,5.1.2.2.3)“如果主函数执行返回指定值,则终止状态返回到主机环境是不确定的”

在主函数中省略return时,用-std=c99-std=gnu99编译的返回值为0