簡體   English   中英

當函數缺少返回值時,編譯器會生成警告但不會出錯?

[英]When a function missing the return value, the compiler generates a warning but not an error?

這是一個c ++函數:

int FuncWithoutReturn()
{
  int var = 10;
  ++var;
  // No return value here !!!
}

在MSVC中,編譯器生成錯誤:

錯誤C4716:'FuncWithoutReturn':必須返回一個值。

但在XCode 5中,編譯器只是發出警告:

控制到達非空函數的結束

在運行時,如果我很幸運,應用程序崩潰。 我知道這是一個愚蠢的錯誤,但編譯器首先產生錯誤會很好。

只是想知道為什么XCode認為這是一個警告而不是錯誤。

您可以使用-Werror=return-type來發出警告和錯誤,在我原來的評論中我忘記了。 你可以看到現場

這是clanggcc中的一個選項,據我所知, XCode可以使用其中任何一個。

退出值返回函數的末尾是未定義的行為 ,我們可以通過轉到草案C ++標准部分6.6.3看到返回語句2段,其中說:

[...]離開函數末尾相當於沒有值的返回; 這會導致值返回函數中的未定義行為。

未定義的行為不需要診斷( 警告或錯誤 ),但在許多情況下編譯器將提供一個。

您可以使用-Werror=return-type啟用它

只是想知道為什么XCode認為這是一個警告而不是錯誤。

檢查項目的/目標的/ xcconfig的“不匹配的返回類型”(又名GCC_WARN_ABOUT_RETURN_TYPE )的設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM