我有一些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),这可能没有指定?
答案 0 :(得分:13)
默认情况下gcc
为-std=gnu89
,即C90 + GNU扩展名。
而C90说:
(C90,5.1.2.2.3)“如果main函数执行一个不指定值的返回,则返回到主机环境的终止状态是未定义的”
在main函数中省略return时,使用-std=c99
或-std=gnu99
进行编译,返回值为0
。