为什么这没有给出编译错误 #包括 int func() { } 内部主(空) { printf(“%d\n”,func()); 返回0; }

为什么这没有给出编译错误 #包括 int func() { } 内部主(空) { printf(“%d\n”,func()); 返回0; },c,compilation,output,C,Compilation,Output,函数“func()”是“int”返回类型,但不返回任何内容。在打印函数中调用该函数时,为什么会给出输出0?尽管函数定义与函数代码不一致,但为什么它能够成功编译?如果启用警告,您将看到诊断。传统上,C隐式允许所有函数返回int。返回值的行为未定义,因此不能保证为0。在不同的编译器上、不同的平台上或使用不同的优化标志,甚至仅仅通过添加或删除其他不相关的代码,行为都可能发生变化。您看到0的原因可能是因为您运行的是未优化的,并且寄存器或堆栈位置中的任何先前值都是0。这纯属偶然,依赖行为最终将导致代码中出

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

如果启用警告,您将看到诊断。传统上,C隐式允许所有函数返回int。返回值的行为未定义,因此不能保证为0。在不同的编译器上、不同的平台上或使用不同的优化标志,甚至仅仅通过添加或删除其他不相关的代码,行为都可能发生变化。您看到0的原因可能是因为您运行的是未优化的,并且寄存器或堆栈位置中的任何先前值都是0。这纯属偶然,依赖行为最终将导致代码中出现错误

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

所有GCC编译器都会给出输出0。该行为未定义。您可以得到一个随机值、崩溃或任何东西。@AmanMahajan可能是,但不能保证。@AbhishekChoubey不,它不是。所有GCC编译器都给出了输出0。行为未定义。你可以得到一个随机值或崩溃或任何东西。@AmanMahajan可能,但不能保证。@AbhishekChoubey不,不能保证。
#include <stdio.h>
int func()
{

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