ローカル変数のアドレスを返すことによってgccが発行する特定の警告を抑制したいと思います。gccを抑制する4.2.1プラグマによる警告
#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
プラットフォーム:この問題は、私はまだLinux上で試していないのMacOSX 10.5 Snow Leopardは、 に少なくとも存在します。
私は実際に問題を見ることができ、それらを修正するために強制的に行うことができるように、警告をエラー に変えて実行したいと思います。
この特定のコードはバグではなく、 (MSVCでも動作します)のスタックポインタを見つけるための "ポータブルな"手法です。スタックポインタは ルーチンガベージコレクションで使用するために必要とされる
【実際には、2つのスタックポインタを有する Itaniumでは動作しません(中断されたスレッドのスタック上のポインタを検索します)。
私はあまりにも:私はなぜだろうか?どうもありがとう! – Yttrill
なぜなら、1を返すとき、コンパイラはスタック変数であることを知る方法を持っています。この場合、void * vはメモリ内の任意の場所を指すことができ、コンパイラはそれをチェックしません。 – shreyasva