web-dev-qa-db-ja.com

「()」はどのようにしてステートメントをC ++の式に変換しますか?

私は次のコードを持っています:

int main() {
    int i=0;
    int j=({int k=3;++i;})+1; // this line
    return 0;
}

コンパイルして実行します。 「この行」から()を削除すると、コンパイルされません。

ここで適用されている構文規則に興味があります。

{}には2つのステートメントが含まれ、最後のステートメントはこのコードブロックの「戻り値」を示します。次に、この戻り値を使用可能にするために、余分な()ペアが必要なのはなぜですか?

21
Hind Forsum

それは statement expression であり、GCC固有の拡張です。


リンクされた参照から:

括弧で囲まれた複合ステートメントは、GNU Cの式として表示されます。これにより、式内でループ、スイッチ、ローカル変数を使用できます。

複合文は、中括弧で囲まれた文のブロックです。

36