理解最令人煩惱的解析異常
在C 語言中,有爭議的最令人煩惱的解析(MVP) 規則規定,特定的語法歧義始終是被解釋為函數聲明,儘管大多數程式設計師期望有其他情況。此異常是由以下語法引起的:
A a( A() );
歧義解析
此程式碼可以透過兩種方式解析:
作為函數宣告傳回類型 A 的物件並採用傳回類型 A 的單一未命名參數的函數。
根據 MVP 規則,程式碼必須解釋為第二個選項,儘管大多數程式設計師期望首先。
標準的基本原理
引入 MVP 規則是為了保持一致性在 C 語意中。如果沒有它,相同的語法可以解釋為變數定義或函數聲明,這取決於上下文。這會引入歧義並降低程式碼可讀性。A foo;
考慮以下範例:
A foo();
這一行顯然是變數定義。但是,如果 MVP 不存在,則以下行將不明確:
它可以被解釋為帶有空括號的變數定義或函數宣告。透過強制執行 MVP 規則,可以消除這種歧義性。
結論
MVP 規則透過始終將不明確的程式碼解釋為函數聲明來強制 C 語法的一致性。雖然這種選擇對某些程式設計師來說似乎違反直覺,但它提供了清晰且明確的解析機制,減少了錯誤的可能性並提高了程式碼的可讀性。以上是為什麼 C 最令人煩惱的解析總是將 `A a(A());` 解釋為函數宣告?的詳細內容。更多資訊請關注PHP中文網其他相關文章!