8

GNUC C では、 を使用できますtypeof(expression)。内部に副作用のある式を使用することは合法です。たとえば、次の C コードを使用できます。

int x = 0;
typeof(x++) y;

この場合、副作用は無視され、その後も x はゼロのままです (型はコンパイル時のみのものであるため、これは理にかなっています)。

ただし、GCC のドキュメントには次のように記載されています。

typeof のオペランドは、それが可変的に変更された型の式またはそのような型の名前である場合にのみ、その副作用について評価されます。

この文はどういう意味ですか? typeof副作用で書いて、実際に実行時に副作用を実行させることは本当に可能ですか? 私にとって、この文はこれを示しているようです。

4

1 に答える 1

9

はい、場合によっては、内部の副作用をtypeof評価することができます。ドキュメントにあるように、「可変的に変更された型」内にある必要があります。これは、 などのランタイム値に依存する型int[x]です。

したがって、次のコードは正当であり、y が type であることを宣言し、int[1]その後 x の値は 1 になります。

int x = 0;
typeof(int[++x]) y;

もちろん、可変的に変更された型全般と同様に、これはローカル変数宣言 (関数内) に対してのみ有効です。

于 2012-07-16T12:47:29.840 に答える