1

我想抑制由返回局部变量地址引起的 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 上尝试过。

如果您想知道为什么:我想在运行时将警告变成错误以停止冗长的构建过程,这样我就可以真正看到问题并被迫修复它们。

此特定代码不是错误,它是一种用于查找堆栈指针的“可移植”技术(也适用于 MSVC)。[实际上它不适用于有两个堆栈指针的安腾]

垃圾收集例程需要堆栈指针(以在挂起线程的堆栈上搜索指针)。

4

2 回答 2

2

这似乎使警告对我来说消失了:

void *get_stack(void) {
  void *v = &v;
  return v;
}
于 2010-11-24T09:42:30.977 回答
0

正如文档所述,您只能控制显示为-fdiagnostics-show-option. 它没有出现在我身上。我正在运行 4.4.1,但我怀疑它是否适用于 4.2.1。

您可能需要提交错误以将其包含在诊断系统中。

于 2010-11-24T04:11:01.367 回答