首頁  >  文章  >  後端開發  >  C 中未定義行為和格式錯誤有何不同?

C 中未定義行為和格式錯誤有何不同?

Susan Sarandon
Susan Sarandon原創
2024-11-21 18:23:16551瀏覽

What's the Difference Between Undefined Behavior and Ill-Formedness in C  ?

區分未定義行為和格式錯誤

未定義行為(UB)、格式錯誤和實現定義的行為是不同的概念C .然而,該標準的術語可能會令人困惑,特別是“格式錯誤;無需診斷”這一短語。

格式錯誤的程序和可診斷性

錯誤的-形成的程序違反了語言的語法或語義規則。根據該標準,它“否則僅被定義為格式不正確”。從邏輯上講,這意味著格式錯誤的程式不應編譯。

但是,該標準允許實現具有根據標準格式錯誤的擴展,但不會改變格式良好的程式的行為。在這些情況下,實作必須診斷擴展的使用,但允許繼續執行。

未定義的行為和可診斷性

未定義的行為是指無法執行的程序行為可以透過標準來預測。實作可以自由地以任何方式定義行為,包括暫停執行或默默地忽略問題。與格式錯誤不同,UB 不一定意味著程式不應該編譯。

「格式錯誤;無需診斷」

術語「格式錯誤」 「不需要診斷」可以解釋為指程式違反語法或語意規則,但不需要實現來診斷錯誤的情況。這本質上使其等同於 UB,只不過實作仍然可以靜默退出或繼續執行。

使用這種措詞的原因可能是為了實現的靈活性。它使實作能夠以在實踐中可能有用的方式處理格式錯誤的錯誤。

結論

儘管C 標準的措辭有時不一致,一般規則是錯誤或格式不正確的代碼需要診斷,除非標準明確指出否則或者它是未定義的行為。在「格式錯誤;無需診斷」的情況下,它本質上是未定義行為的同義詞,為實施者提供了處理某些錯誤的一定自由度。

以上是C 中未定義行為和格式錯誤有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn