重複の可能性:
C99 まで宣言とコードの混在が禁止されていたのはなぜですか?
この警告に関連する質問がいくつかありますが、ISO C90 forbids mixed declarations and code
そもそもなぜこれが C90 標準に含まれているのかという質問には答えていません。
それで - なぜこの規定なのですか?
重複の可能性:
C99 まで宣言とコードの混在が禁止されていたのはなぜですか?
この警告に関連する質問がいくつかありますが、ISO C90 forbids mixed declarations and code
そもそもなぜこれが C90 標準に含まれているのかという質問には答えていません。
それで - なぜこの規定なのですか?
私が知っている最大の理由は、言語の文法とパーサーを単純化することです。
宣言を前もって行うと、コードのブロックは次のようになります。
{
<declarations>
<stmts>
}
<stmts>
その結果、宣言を含む必要がないため、の定義が簡略化されます。これにより、パーサーが単純化されます。これは、ブロックの開始時にステートメントと宣言を明確にするだけでよいためです。
実際、コードブロックのこの特定の定義は、標準で体系化されています。
3.6.2 Compound statement, or block
Syntax
compound-statement:
{ declaration-list<opt> statement-list<opt> }
declaration-list:
declaration
declaration-list declaration
statement-list:
statement
statement-list statement