【问题标题】:Why is this not giving a compile error [duplicate]为什么这不给出编译错误[重复]
【发布时间】:2014-11-15 05:47:07
【问题描述】:
#include <stdio.h>
int func()
{

}
int main(void)
{
    printf("%d\n",func());
    return 0;
}

函数“func()”的返回类型为“int”,但没有返回任何内容。在 print 函数中调用该函数时,为什么会给出输出 0?为什么函数定义与函数代码不一致,却编译成功?

【问题讨论】:

    标签: c compilation output


    【解决方案1】:

    如果您启用警告,您将看到诊断信息。传统上,C 隐式允许所有函数返回 int。返回值的行为是未定义的,因此不能保证为 0。行为可能会在不同的编译器或不同的平台上或使用不同的优化标志,甚至只是通过添加或删除其他不相关的代码来改变。您可能看到 0 的原因是因为您正在运行未优化并且之前的值恰好在寄存器或堆栈位置中是 0。这纯粹是机会,并且依赖行为 最终会导致代码中的错误

    【讨论】:

    • 所有 GCC 编译器都给出输出 0。
    • 行为未定义。你可以得到一个随机值或崩溃或任何东西。
    • @AmanMahajan 也许,但不能保证。
    • @AbhishekChoubey 不,它没有。
    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多