【问题标题】:GCC default main return value is not zeroGCC 默认主返回值不为零
【发布时间】: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 模式下是无害的。

标签: c gcc


【解决方案1】:

默认情况下,gcc-std=gnu89,这是 C90 + GNU 扩展。

C90 说:

(C90, 5.1.2.2.3) "如果主函数执行了一个没有指定值的返回,则返回给宿主环境的终止状态是未定义的"

使用-std=c99-std=gnu99 编译以在main 函数中省略return 时返回0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2019-02-22
    • 1970-01-01
    • 2020-08-03
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多