1

このコードは、最適化フラグが設定されていない場合に正常に機能します。

#include <cstdio>
int main(){
  float *ptr = ({float var[10] = {1,2,3,4,5,6,7,8,9,10}; var;});
  float *ptr1 = ({float var[10]; for(int i_=0;i_<10;i_++)var[i_]=i_+1; var;});
  float *ptr2 = ({float var[10]; var[4]=5; var;});
  printf("\n value = %f %f %f",ptr[4],ptr1[4],ptr2[4]);
}

期待どおりに戻ります5 5 5。ただし、最適化フラグが設定されている場合は、 を返します5 0 5

ptr1ループに関連する問題があります。なんで?多分それはバグですか?

最新の 4.8.0、テスト済み x64、x86、および他のビルドを使用しています。すべて同じ動作。

4

2 に答える 2

2

var が指す値は、スタックに割り当てられます。ただし、var のスコープは、var が含まれているブラケットです。var へのポインターを設定すると、未定義の動作が発生します。これまで見てきたように、ほとんどの場合、スタック内の値は出力するまで変更されていません。ただし、これはさまざまな最適化設定で変わる可能性があります。これはバグではありません。それは未定義の動作の性質にすぎません。

于 2013-05-15T03:36:02.270 に答える