編譯器對非值回傳函數的容忍
在 C 中,非 void 函數應該傳回一個值。但是,在某些情況下,函數可能不會傳回值,從而導致對其行為產生疑問。
觀察到的行為
提供的程式碼片段聲明了一個非-void 函數 Min,不明確傳回值。相反,它會使用所需的結果更新引用參數 out。
標準合規性
根據 C 11 草案標準,不在 a 中提供非空函數構成未定義的行為。這意味著編譯器沒有義務發出錯誤或警告,因為可能很難在所有情況下準確地確定意圖。
編譯器行為
儘管由於該標準的模糊性,某些編譯器(例如GCC 和Clang)可能會使用-Wall 標誌發出警告,通知潛在問題。透過利用 -Werror=return-type 標誌,這些警告可以轉換為錯誤。
Visual Studio 行為
在 Microsoft Visual Studio 中,類似於提供的程式碼預設情況下,程式碼片段會產生錯誤 (C4716),強制要求非 void函數應傳回
未定義行為警報
需要注意的是,不建議依賴未定義行為。雖然某些編譯器可能會提供警告或錯誤,但其他編譯器可能會簡單地忽略該問題,從而可能導致意外或錯誤的程式執行。
以上是為什麼 C 編譯器以不同方式處理沒有明確傳回的非 Void 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!