Cが空の宣言を許可するのはなぜですか?両方とも文法レベルで明示的に許可されており、コンパイルされた場合にのみ警告を生成します。空の宣言はなぜ許可されますか?
生産declaration
、C規格の附属書Aから、文法レベルでそれを可能にされている:
declaration
= declaration_specifiers , ";"
| declaration_specifiers , init_declarator_list , ";"
| static_assert_declaration
;
(MEによってEBNF
になっ)
有用なので'struct tagS {int x;}ではありません。 }; '正式に空の宣言? –
あなたはどの標準規格を見ていますか? C11には2番目と3番目のオプションのみが表示されます。 – dbush
@BenVoigt Right!はい、正式には空の宣言です。構造体は、declaration_specifiers => type_specifier => struct_or_union指定子としてのみ扱われます。 – Leandros