私は次のコードを持っています:
int main() {
int i=0;
int j=({int k=3;++i;})+1; // this line
return 0;
}
コンパイルして実行します。 「この行」から()
を削除すると、コンパイルされません。
ここで適用されている構文規則に興味があります。
{}
には2つのステートメントが含まれ、最後のステートメントはこのコードブロックの「戻り値」を示します。次に、この戻り値を使用可能にするために、余分な()
ペアが必要なのはなぜですか?
それは statement expression であり、GCC固有の拡張です。
リンクされた参照から:
括弧で囲まれた複合ステートメントは、GNU Cの式として表示されます。これにより、式内でループ、スイッチ、ローカル変数を使用できます。
複合文は、中括弧で囲まれた文のブロックです。