GCC默认主要返回值不为零

eff*_*ffe 10 c gcc

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

int main(int argc, char *argv[])
{
  // blah blah
}
Run Code Online (Sandbox Code Playgroud)

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

gcc file.c -Wall -Wextra
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

oua*_*uah 13

默认情况下gcc-std=gnu89C90 + GNU扩展.

而C90说:

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

与编译-std=c99-std=gnu99以具有一个返回值0时,在主函数被省略的回报.