毫無疑問,C 標準為歸類為「不清楚」的行為引入了一系列廣泛的定義。然而,「程序格式錯誤;無需診斷」這句話引發了關於其與其他行為類別的區別的問題。
定義格式正確和格式錯誤的行為:
C 標準將程式分類為格式良好或格式錯誤。格式良好的程序遵守語法和可診斷的語義規則。相反,格式錯誤的程式違反了這些規則,最好不要編譯。
實現定義的、未指定的和未定義的行為:
實現定義的和未指定的行為是與格式良好的行為不同,但它們並不意味著錯誤的程式碼。在前一種情況下,實施必須記錄其具體操作,而在後一種情況下,則不需要記錄。另一方面,根據 1.3.13,未定義的行為意味著程式是錯誤的。
編譯器、未定義的行為和格式錯誤的程式:
儘管術語「錯誤」建議編譯器應以錯誤訊息終止編譯,但C 標準允許對未定義行為進行靜默處理。值得注意的是,編譯器通常不會因未定義的行為而發出警告或終止編譯。
格式錯誤的程序和診斷要求:
使用「無診斷」與「格式錯誤」並存的是一個悖論。如果格式不正確的程式不應該編譯,那麼允許編譯器默默地忽略它們將是違反直覺的。然而,標準明確允許這種可能性。
結論:
「格式錯誤;無需診斷」和「未定義行為」之間的區別仍然模糊。雖然格式不正確的程式和不正確的程式碼以及未定義的行為與執行時間問題之間可能存在關聯,但這並不總是一致的。最終,「無需診斷」方面至關重要,因為它超越了在格式不正確的程序情況下產生診斷的期望。
以上是C 的「格式錯誤;無需診斷」和未定義行為之間有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!