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

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

Susan Sarandon
Susan Sarandon原創
2024-12-16 08:27:14960瀏覽

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中文網其他相關文章!

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