最も厄介な解析: C 構文のパズル
C 構文の迷宮の世界では、1 つの謎めいた難題が際立っています。厄介な解析 (MVP)。この構文の特殊性はプログラマーにとって課題となっており、多くの人が当惑しています。
MVP の核心は、特定の構文のあいまいな解釈にあります。
A a( A() );
この複雑な行は、次のように解釈できます。 2 つの矛盾する方法:
驚くべきことに、最初の解釈が正しいというプログラマの一般的な期待にもかかわらず、C 標準では 2 番目の解釈が義務付けられています。このため、多くの人が頭を悩ませ、なぜこのような予想外で混乱を招く可能性のある選択が行われたのか疑問に思っています。
MVP の背後にある理論的根拠を理解するために、MVP が存在しなかった仮定のシナリオを考えてみましょう。この別の現実では、関数は C でどのように宣言されるでしょうか?
A foo();
残念ながら、この構文を使用すると、メソッド宣言ではなく変数定義が作成されます。関数宣言に対応するには、新しいキーワードや厄介な構文が必要になります。
そのような複雑さを避けるために、C 標準では、より単純なルールを選択しました。「宣言として解釈できるものはすべて、宣言として解釈される」宣言。"これには、変数定義と関数宣言の両方が含まれます。したがって、構文
A a;
は変数を定義し、
A a();
は関数を宣言します。
このルールを採用すると、構文の一貫性が保証され、特別な場合。これにより、最初はプログラマが混乱するかもしれませんが、最終的には言語の明確さと一貫性が促進されます。
以上がC で最も厄介な解析とは何ですか?また、なぜ `A a(A());` が関数宣言として解釈されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。