我想要通过返回本地变量的地址来抑制由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有两个堆栈指针]
垃圾收集例程需要使用堆栈指针 (搜索悬挂线程堆栈上的指针)。
答案 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将其包含在诊断系统中。