簡體   English   中英

有條件的分支

[英]Conditional branches

為什么這段代碼會編譯?

#include <iostream>

int foo(int x)
{
   if(x == 10)
     return x*10;
}

int main()
{
int a;
std::cin>>a;
std::cout<<foo(a)<<'\n';
}

編譯器不應該給我一個錯誤,如“並非所有代碼路徑返回值”? 當x不等於10時,會發生什么/返回我的函數?

結果是未定義的,因此編譯器可以自由選擇 - 您可能會得到恰好位於調用者期望結果的適當堆棧地址的情況。 激活編譯器警告,編譯器將通知您有關遺漏的信息。

在這種情況下,編譯器不需要給出錯誤。 許多人會,有些人只會發出警告。 有些人顯然不會注意到。

這是因為您的代碼可能會在此函數之外確保條件始終為true。 因此,它不一定是壞的(雖然它幾乎總是,這就是大多數編譯器至少會發出警告的原因)。

規范將聲明退出應返回值但未返回值的函數的結果是未定義的行為。 可以返回值。 或者程序可能崩潰。 或任何可能發生的事情 這是未定義的。

暫無
暫無

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

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