首頁 > 後端開發 > C++ > 儘管聲明了返回類型,為什麼 C 函數在沒有明確返回語句的情況下編譯?

儘管聲明了返回類型,為什麼 C 函數在沒有明確返回語句的情況下編譯?

Susan Sarandon
發布: 2024-12-13 04:41:15
原創
786 人瀏覽過

Why Does a C   Function Compile Without an Explicit Return Statement Despite Declaring a Return Type?

為什麼這個 C 程式碼片段在缺少回傳值的情況下仍能編譯?

在提供的程式碼片段中:

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

函數 Min 被宣告為傳回 tvec4,但程式碼未提供明確回傳語句。這就提出了一個問題,為什麼編譯器編譯程式碼時沒有錯誤。

未定義的行為

根據 C 11 草案標準,從值的末尾流出-返回函數而不提供返回值會導致未定義的行為。這意味著編譯器在這種情況下沒有義務發出錯誤或警告。

編譯器選項

但是,編譯器可以設定為警告甚至產生錯誤對於未定義的行為。例如,使用 -Wall 標誌通常會觸發以下警告:

warning: control reaches end of non-void function [-Wreturn-type]
登入後複製

透過新增 -Werror=return-type 標誌,編譯器會將此警告視為錯誤,強製程式碼已修正。

Visual Studio

在Visual Studio 中,程式碼會產生錯誤預設為C4716:

error C4716: 'Min' : must return a value
登入後複製

如果並非所有程式碼路徑都傳回值,Visual Studio 將發出警告(C4715)。

以上是儘管聲明了返回類型,為什麼 C 函數在沒有明確返回語句的情況下編譯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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