【发布时间】:2016-07-13 17:05:08
【问题描述】:
我正在使用带有 GCC 编译器的代码块。在下面的代码中,编译器在返回本地引用时发出警告,但在返回本地指针时没有警告,尽管两者是相同的。为什么?
我知道这些变量是本地的,一旦控制权从函数返回,它们就会被销毁。取消引用这些会导致未定义的行为。
int *check(int j)
{
int *q;
q= &j;
return q; // No warning
//return &j; // Warning
}
【问题讨论】:
-
如果您不使用返回值,程序将保持定义。编译器通过警告您来帮您一个忙,它不必这样做。
-
无法重现,我安装的 gcc (5.4.0) 产生了预期的警告。
-
因为编译器不够聪明。你不应该依赖编译器足够聪明。
-
只要你不使用返回值来访问指向的内存地址,就没有坏处。
-
请看下面我的回答。它没有显示如何获得警告,但它显示了一个有趣的我想说的 GCC 问题。
标签: c