曖昧な構文に遭遇すると、
A a( A() );
興味深い疑問が生じます。なぜ C 標準はこの解釈を優先するのでしょうか。変数定義に対する関数宣言として?一般的な期待からのこの乖離により、標準のスタンスが広くプログラマーの直感に沿うべきかどうかという議論が生じています。
この選択を理解するために、「最も厄介な解析」(MVP) として知られる概念を詳しく掘り下げてみましょう。関数を宣言するという単純なタスクを考えてみましょう。
A foo();
MVP が存在しない場合、このコードは「foo」という名前の変数を定義しているものとして解釈されます。新しいキーワードを導入したり、関数宣言により複雑な構文を採用したりすると、言語が過度に複雑になってしまいます。代わりに、MVP は類似の構文構造間で一貫性を保証します。
この例では、明確な宣言
A foo;
は変数を定義し、
A foo();
は関数を宣言します。 。このロジックをもう少し複雑な MVP のケースに拡張することで、一貫性を維持します。これにより、ルールは単純化され、「宣言に似ている可能性のあるものはすべて宣言として解釈する」という単純なものになります。このアプローチにより、複雑な例外や修飾子の必要性が軽減されます。
この説明は MVP の背後にある歴史的な動機を完全には明確にしていないかもしれませんが、言語構文の一貫性と単純さという実際的な利点を強調しています。この推論が一般的なプログラミングの直感と一致するかどうかは、C コミュニティで引き続き議論されています。
以上がC があいまいな構文で変数定義よりも関数宣言を優先するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。