我有一些 C 程序没有从 main 显式返回,如下所示:
int main(int argc, char *argv[])
{
// blah blah
}
如果我使用 GCC 4.6.3 和以下选项编译它们:
gcc file.c -Wall -Wextra
程序不会返回 0 并给我带来问题,但标准(以及许多其他关于 SO 的答案)说:
如果 main 函数的返回类型是与 int 兼容的类型,则从初始调用到 main 函数的 return 等效于以 main 函数返回的值作为参数调用 exit 函数;[10]到达 }终止主函数的返回值 0。如果返回类型与 int 不兼容,则返回给宿主环境的终止状态是未指定的。
[10] 根据 6.2.4,在 main 中声明的具有自动存储持续时间的对象的生命周期将在前一种情况下结束,即使在后者中它们不会有。
我的程序返回不同的值,160、15、14……垃圾?
我错过了什么吗?这是 GCC 错误吗?在 GCC 在线文档中找不到任何内容。GCC 是否仍然引用一些旧的 C 标准(C99 之前),而这些标准不能被指定?