编译下面的代码(g ++ 4.6)时,我收到(预期的)警告消息:
./test.cpp:3:7: attention : address of local variable ‘ii’ returned [enabled by default]
。
int *get_ii()
{
int ii = 2;
return ⅈ
}
int main(int argc, char* argv[])
{
int *ii;
ii = get_ii();
return 0;
}
问题:是否有编译器选项允许我在编译时忽略此警告消息?
原因:这纯粹是出于教学目的。我想向观众展示这段代码并询问它有什么问题。这就是我想隐藏警告信息的原因,因为这是一个很大的线索。
答案 0 :(得分:10)
在gcc中无法做到这一点(MSVS中有pragma warning
)这是一个警告你不应该忽略。
将函数local的地址返回给函数是未定义的行为。当get_ii
返回时,变量ii
不再存在,但您将返回指向它的指针。如果您将其更改为
int *get_ii()
{
static int ii = 2;
return ⅈ
}
它可以解决问题和警告。
答案 1 :(得分:3)
我建议不要在大多数情况下使用它,但由于这是出于教学目的,您可以使用-w
标志来禁止来自g ++的所有警告。如果升级到更新版本的g ++,也可以使用-Wno-return-local-addr
来禁止该特定警告。