使用pragma抑制gcc 4.2.1警告

时间:2010-11-24 03:56:34

标签: c gcc pragma

我想要通过返回本地变量的地址来抑制由gcc发出的特定警告。

#include <stdio.h>
#pragma GCC diagnostic ignored "-Waddress"
void *get_stack() {
  unsigned long v;
  return &v;
}

int main()
{
  void *p = get_stack();
  printf("stack is %p\n",p);
  return 0;
}

>gcc -fdiagnostics-show-option p.c
p.c: In function ‘get_stack’:
p.c:5: warning: function returns address of local variable

平台:此问题至少存在于MacOSX 10.5 Snow Leopard上, 我还没有尝试过Linux。

如果你想知道为什么:我想在警告变成错误的情况下运行 停止冗长的构建过程,这样我实际上可以看到问题并被迫 解决它们。

这个特殊的代码不是bug,它是一种用于查找的“便携式”技术 堆栈指针(也适用于MSVC)。 [实际上它不适用于 Itanium有两个堆栈指针]

垃圾收集例程需要使用堆栈指针 (搜索悬挂线程堆栈上的指针)。

2 个答案:

答案 0 :(得分:2)

这似乎让我的警告消失了:

void *get_stack(void) {
  void *v = &v;
  return v;
}

答案 1 :(得分:0)

作为docs注释,您只能控制显示-fdiagnostics-show-option的选项。它没有出现在我身上。我正在运行4.4.1,但我怀疑它也适用于4.2.1。

您可能希望file a bug将其包含在诊断系统中。