具有非void 回傳類型的函數傳回垃圾
在C 中,如果函數宣告非void 傳回型別但無法傳回一個值,編譯器通常會回傳一個垃圾值。這就提出了一個問題:為什麼這在編譯時不被視為錯誤?
與未初始化變數的比較
與未初始化變數的類比不適用。如果存在未初始化的變量,編譯器可以靜態檢測錯誤,因為分配是當前函數堆疊幀的本地變數。相比之下,函數返回值分配在呼叫者的堆疊幀上,這使得編譯器追蹤更具挑戰性。
未定義的行為
根據 C標準,從傳回值函數的末端流出會導致未定義的行為。這意味著編譯器沒有義務檢測或處理這種情況。
編譯器警告
大多數編譯器都會針對提供的範例中的程式碼發出警告:
int func2() { // does not return anything }
這些警告表明代碼可能不安全,可能會導致意外的情況
確定函數退出的困難
C 標準不要求對此行為進行編譯時錯誤檢查,因為確定函數是否確實退出可能具有挑戰性在最後退出或透過異常或其他控制流機制退出。
以上是為什麼 C 不保證缺少回傳值的函數出現編譯時錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!