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