我有一些没有从 main 显式返回的 C 程序,如下所示:
int main(int argc, char *argv[])
{
// blah blah
}
如果我使用 GCC 4.6.3 和以下选项编译它们:
gcc file.c -Wall -Wextra
程序不会返回 0 并给我带来问题,但标准(以及许多其他答案)说:
如果 main 函数的返回类型是与 int 兼容的类型,则从初始调用 main 函数返回相当于以 main 函数的返回值作为参数调用 exit 函数;[10]到达终止 main 函数的 } 返回值 0。如果返回类型与 int 不兼容,则返回到主机环境的终止状态是未指定的。
[10] 根据 6.2.4,在 main 中声明的具有自动存储持续时间的对象的生命周期将在前一种情况下结束,即使它们在后一种情况下不会结束。
我的程序返回不同的值,160、15、14...垃圾?
我错过了什么吗?这是海湾合作委员会的错误吗?在 GCC 在线文档中找不到任何内容。
GCC 是否仍然引用某些旧的 C 标准(C99 之前的版本),但无法指定?
默认情况下gcc
is -std=gnu89
这是C90 + GNU 扩展。
C90 说:
(C90,5.1.2.2.3)“如果主函数执行没有指定任何值的返回,则返回到主机环境的终止状态是未定义的”
编译为-std=c99
or -std=gnu99
返回值为0
当 main 函数中省略 return 时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)