首頁 > 後端開發 > C++ > 為什麼我的非 Void C 函數不回傳值不會產生編譯器錯誤?

為什麼我的非 Void C 函數不回傳值不會產生編譯器錯誤?

Susan Sarandon
發布: 2024-12-16 08:27:14
原創
958 人瀏覽過

Why Doesn't My Non-Void C   Function Returning No Value Produce a Compiler Error?

C 程式碼中非Void 函數不回傳值

問題:

下面的C 程式碼有一個不回傳值的非void 函數:

static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
    tvec3::Min(a,b,out);
    out.w = min(a.w,b.w);
}
登入後複製

為什麼編譯時沒有錯誤?

答案:

根據C 11 草案標準第6.6.3 節第2 節,此行為未定義,其中規定從a 的末尾流出返回值的函數會導致未定義的行為。

編譯器警告和錯誤:

  • gcc 和clang: 可以使用-Wall 標誌產生警告(警告:控製到達非void 函式的結尾[-Wreturn-type] )。可以使用 -Werror=return-type 標誌將其轉換為錯誤。
  • Visual Studio: 預設產生錯誤 C4716('Min':必須傳回值)或警告C4715 如果不是所有程式碼路徑都會回傳值。

意義:

未定義的行為可能會導致不可預測的結果,包括程式崩潰。建議使用 -Wall 和 -Wextra 等編譯器選項來偵測和修復未定義行為的實例。

以上是為什麼我的非 Void C 函數不回傳值不會產生編譯器錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板