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 でも機能します)。[実際には、スタック ポインタが 2 つある Itanium では動作しません]

スタック ポインターは、ガベージ コレクション ルーチンで使用するために必要です (中断されたスレッドのスタックでポインターを検索するため)。

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 に答える