如何忽略以下编译器警告?

时间:2013-03-04 16:07:28

标签: c++ g++

编译下面的代码(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;
}

问题:是否有编译器选项允许我在编译时忽略此警告消息?

原因:这纯粹是出于教学目的。我想向观众展示这段代码并询问它有什么问题。这就是我想隐藏警告信息的原因,因为这是一个很大的线索。

2 个答案:

答案 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来禁止该特定警告。