7

C 言語の練習中に式に直面し、次のように単純化します。

int a=({10;});

gcc コンパイラを通過するため、これは正当な式です。この部分に注目してください: ({10;}). 誰かがそれを説明できますか?詳細なほど良い。ありがとう!

4

2 に答える 2

7

これはステートメント式です。これはgcc 拡張であり、ドキュメント6.1 Statements and Declarations in Expressionsによると:

複合ステートメントの最後の部分は、式の後にセミコロンを付ける必要があります。この部分式の値は、構造全体の値として機能します。

したがって、このコードの場合:

int a=({10;});

これらの規則に従って、値は10に割り当てられaます。

この拡張機能は、Linux カーネルで使用される多くの gcc 拡張機能の1 つです。ただし、リンクされた記事はステートメント式を実際にはカバーしていませんが、このカーネル初心者向け FAQ エントリでは、Linux カーネルでステートメント式を使用する理由のいくつかを説明しています。

gccドキュメントにあるように、 -pedanticオプションを指定してコンパイルすると、 gcc 拡張機能を使用しているときに警告が表示されます。

于 2013-10-16T03:33:15.580 に答える
1

これは標準 C ではなく、ステートメント式と呼ばれる GCC の拡張です。括弧で囲まれた複合ステートメントは、式として表示される場合があります。

複合ステートメントの最後の部分は、式の後にセミコロンを付ける必要があります。この部分式の値は、構造全体の値として機能します。

あなたの例に戻ります:

int a=({10;});

{10;}は複合ステートメント式として機能するためa、値は10です。

于 2013-10-16T03:32:59.977 に答える