首頁  >  文章  >  後端開發  >  C 的「未定義行為」和「格式錯誤;無需診斷」之間有什麼區別?

C 的「未定義行為」和「格式錯誤;無需診斷」之間有什麼區別?

Barbara Streisand
Barbara Streisand原創
2024-11-21 12:40:16589瀏覽

What's the Difference Between C  's

未定義行為與格式錯誤的區別:無需診斷

C 規範定義了各種類型的程序行為,包括未定義、未指定、實現定義、錯誤,而且格式不正確。雖然有些差異相對清晰,但「格式不正確;無需診斷」一詞引起了對其確切含義的質疑。

定義

格式不正確: A違反語法或可診斷語意規則的程序。

未定義的行為:標準對實現操作沒有做出任何假設或要求的程序行為。

錯誤: 標準使用的術語,表示程序格式不正確或參與未定義的行為.

格式良好:遵循語法和可診斷語義的程序

“格式不正確;無需診斷”的情況

當實現以引入新語法或行為的方式擴展語言時,就會出現這種特定的措詞。根據標準,此類擴展被認為是格式錯誤的,但允許實現不發出診斷訊息。

與未定義行為的區別

這裡的關鍵區別是未定義的行為明確承認程序的錯誤性質,而“格式錯誤;無需診斷”是指實現允許違規但未提供明確錯誤的特定情況

對編譯和執行的影響

從技術上講,格式不正確的程式不應該編譯。然而,在「格式錯誤;無需診斷」的情況下,技術上允許實作靜默編譯甚至執行程式而不發出警告。

一致性問題

標準的不一致使用圍繞錯誤的術語導致了混亂。術語「錯誤」意味著需要診斷的錯誤,但 1.3.13 中的「註釋」部分允許實作默默地忽略此類問題。

結論

雖然可能存在細微差別在「格式不正確;不需要診斷」和「未定義的行為」之間,標準的不一致使得很難明確區分。最終,這兩個術語都指的是程序行為不可預測並可能導致意外結果的情況。

以上是C 的「未定義行為」和「格式錯誤;無需診斷」之間有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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