使用pragma抑制gcc 4.2.1警告

使用pragma抑制gcc 4.2.1警告,c,gcc,pragma,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; } >gc

我想抑制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
#包括
#pragma GCC诊断被忽略“-Waddress”
void*get_stack(){
无符号长v;
返回&v;
}
int main()
{
void*p=get_stack();
printf(“堆栈是%p\n”,p);
返回0;
}
>gcc-FD诊断显示选项p.c
p、 c:在函数“get_stack”中:
p、 c:5:警告:函数返回局部变量的地址
平台:此问题至少存在于MacOSX 10.5雪豹上, 我还没有在Linux上试过

如果您想知道原因:我希望在运行时将警告变成错误 停止冗长的构建过程,这样我才能真正看到问题并被迫 来修复它们

这个特殊的代码不是bug,它是一种用于查找错误的“可移植”技术 堆栈指针(也适用于MSVC)。[事实上,这对我来说是行不通的 有两个堆栈指针的安腾]

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

注意,您只能控制显示为
-fdiagnostics show option
的选项。我看不出来。我正在运行4.4.1,但我怀疑它对4.2.1也是如此


您可能希望将其包括在诊断系统中。

这似乎使警告消失:

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

原因是,当您返回第1个时,编译器可以知道它是一个堆栈变量,在这种情况下,void*v可能指向内存中的任何位置,而编译器不会对此进行检查。