为什么这不会给出编译错误

时间:2014-11-15 05:47:08

标签: c compilation output

#include <stdio.h>
int func()
{

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

函数“func()”是“int”返回类型,但不返回任何内容。在打印功能中调用该函数时,为什么输出0?为什么它成功编译,尽管函数定义与函数代码不一致?

1 个答案:

答案 0 :(得分:4)

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