c - 使用 pragma 抑制 gcc 4.2.1 警告

标签 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 上尝试过。

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

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

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

最佳答案

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

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

关于c - 使用 pragma 抑制 gcc 4.2.1 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4263320/

相关文章:

gcc - Ansible安装-clang : error: unknown argument: '-mno-fused-madd'

c - #pragma 指令编译器依赖吗?

c - 简单字符串匹配期间比较的字符数

c - GetModuleFileNameW 在当前模块上返回 Null

c - 是否可以打印日志文件的特定部分?

c - 使用另一个编译器更快的代码

gcc - 如何从 gfortran 中转储 GENERIC 树

c - 告诉 gcc 专门展开一个循环

c# - #pragma warning 禁用代码列表及其含义

c - 如何对字符数组(字符串)使用 isdisit()?