0

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

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

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

4

2 回答 2

10

在 gcc 中没有办法(在 MSVS 中有),这是一个你不应该忽略pragma warning的警告。

返回函数局部变量的地址是未定义的行为。返回时get_ii,变量ii不再存在,但您正在返回指向它的指针。如果您将其更改为

int *get_ii()  
{  
  static int ii = 2;
  return ⅈ
}

它将解决问题和警告。

于 2013-03-04T16:19:45.927 回答
4

我建议在大多数情况下不要使用它,但由于这是出于教学目的,您可以使用该-w标志来禁止来自 g++ 的所有警告。-Wno-return-local-addr如果您升级到更新版本的 g++,您也可以使用来抑制该特定警告。

于 2013-03-04T16:59:43.323 回答