C99では、宣言を最初だけでなくコードと混合できることを知っていますが、ISO / IEC 9899:1999のどこに記述されているかを見つけようとしています。検索する必要のあるセクションを教えていただけますか?
前もって感謝します。
この変更は、(非規範的な)Forwardのxiiページに、「宣言とコードの混合」として記載されています。(私見、宣言は「コード」です。「宣言とステートメントの混合」と言うべきでした。)
これは、6.8.2の複合ステートメントの文法で定義されています。
compound-statement:
{ block-item-list[opt] }
block-item-list:
block-item
block-item-list block-item
block-item:
declaration
statement
C89/C90標準の対応する文法は次のとおりです。
compound-statement:
{ declaration-list[opt] statement-list[opt] }
declaration-list:
declaration
declaration-list declaration
statement-list:
statement
statement-list statement
答えは6.8.2節にあります。
block-item: declaration
statement
Ablock-item
は、特定の順序である必要なしに、ステートメントまたは宣言のいずれかになります。
compound-statement:
{ block-item-list_opt }
block-item-list: block-item
block-item-list block-item
C 1999 6.8.2 2は、複合ステートメントは「{」、オプションのblock-item-list、および「}」であり、block-item-listはblock=-itemまたは別のblock-itemのいずれかであると述べています。 -listとblock-itemであり、block-itemが宣言またはステートメントであること。したがって、宣言は、複合ステートメント内の任意のブロック項目にすることができます。次に、6.8は、複合ステートメントは、ステートメントが表示できる場所であればどこにでも表示できることを示しています。さらに、6.9.1は、関数定義の本体が複合ステートメントであると述べています。
compound-statement:
{ block-item-list[opt] }
block-item-list:
block-item
block-item-list block-item
block-item:
declaration
statement