c - 这段C代码是否可以编译?

标签 c

包含这个函数的代码会编译吗?

int *f1(void)
{
   int x = 10;
   return &x;
}

它在我的系统中编译良好,但我看到了此代码编译失败的解释:“函数 f1 返回局部变量的地址。由于变量的生命周期在函数返回后结束,因此对返回值的任何使用都会产生未定义的行为。”

最佳答案

它会编译得很好。然而,编译的结果将产生未定义的行为,这意味着任何事情都可能发生。它可以工作,它可以崩溃,它可以召唤粉红色的 unicorn 在你的电脑前跳舞。这是未定义的。

修复代码,无论编译与否,它都是坏代码。

在某些编译器上,它可能会产生警告,您可以配置编译器,以便在出现警告时发出错误。因此也许在某些编译器下使用某些设置,它甚至可能无法编译。

关于c - 这段C代码是否可以编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25461708/

相关文章:

c++ - C/C++ 将字符串放入二维数组?

c - Pthread 互斥锁断言失败

c - 输入错误后循环返回,fgetc(stdin) 问题和循环

C 查找二维数组的一行中的最大数字并将其替换为上三角形中的元素

使用指针更改全局变量值

c - 如何分配/释放包含二维数组的结构

在 C 中构造参数以使用可变数量的参数调用 Ruby C 扩展

c - 分段故障。未知原因(丢失文件?)

c - for 循环完成后出现段错误

c - Ansi C 提示数组初始化