區分未定義行為和格式錯誤
未定義行為(UB)、格式錯誤和實現定義的行為是不同的概念C .然而,該標準的術語可能會令人困惑,特別是“格式錯誤;無需診斷”這一短語。
格式錯誤的程序和可診斷性
錯誤的-形成的程序違反了語言的語法或語義規則。根據該標準,它“否則僅被定義為格式不正確”。從邏輯上講,這意味著格式錯誤的程式不應編譯。
但是,該標準允許實現具有根據標準格式錯誤的擴展,但不會改變格式良好的程式的行為。在這些情況下,實作必須診斷擴展的使用,但允許繼續執行。
未定義的行為和可診斷性
未定義的行為是指無法執行的程序行為可以透過標準來預測。實作可以自由地以任何方式定義行為,包括暫停執行或默默地忽略問題。與格式錯誤不同,UB 不一定意味著程式不應該編譯。
「格式錯誤;無需診斷」
術語「格式錯誤」 「不需要診斷」可以解釋為指程式違反語法或語意規則,但不需要實現來診斷錯誤的情況。這本質上使其等同於 UB,只不過實作仍然可以靜默退出或繼續執行。
使用這種措詞的原因可能是為了實現的靈活性。它使實作能夠以在實踐中可能有用的方式處理格式錯誤的錯誤。
結論
儘管C 標準的措辭有時不一致,一般規則是錯誤或格式不正確的代碼需要診斷,除非標準明確指出否則或者它是未定義的行為。在「格式錯誤;無需診斷」的情況下,它本質上是未定義行為的同義詞,為實施者提供了處理某些錯誤的一定自由度。
以上是C 中未定義行為和格式錯誤有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!