代码之家  ›  专栏  ›  技术社区  ›  Yttrill

用pragma抑制gcc 4.2.1警告

  •  1
  • Yttrill  · 技术社区  · 14 年前

    我想取消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 回复  |  直到 14 年前
        1
  •  2
  •   caf    14 年前

    这似乎让我忘记了警告:

    void *get_stack(void) {
      void *v = &v;
      return v;
    }
    
        2
  •  0
  •   Matthew Flaschen    14 年前

    作为 docs 注意,您只能控制出现的选项 -fdiagnostics-show-option . 我看不出来。我正在运行4.4.1,但我也怀疑它是否适用于4.2.1。

    你可能想 file a bug 以便将其包含在诊断系统中。