GCC默认主要返回值不为零

我有一些C程序没有从main返回任何显式,如下所示:

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

如果我使用GCC 4.6.3和以下选项编译它们:

 gcc file.c -Wall -Wextra 

程序不返回0并给我带来问题,但标准(以及SO上的许多其他答案)说:

如果main函数的返回类型是与int兼容的类型,则从初始调用返回main函数等效于调用exit函数,并将main函数返回的值作为其参数; [10] 到达}终止main函数返回值0 。 如果返回类型与int不兼容,则未指定返回到主机环境的终止状态。

[10]根据6.2.4,在main中声明的具有自动存储持续时间的物体的寿命将在前一种情况下结束,即使它们在后者中没有。

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

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

默认情况下, gcc-std=gnu89 ,这是C90 + GNU扩展。

而C90说:

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

在main函数中省略return时,使用-std=c99-std=gnu99进行编译,返回值为0