簡體   English   中英

功能應該回歸價值問題

[英]Function Should Return Value Question

給定這樣的功能

bool RequestStatus()
{
    ...
    if (code == myCode) {
         return true;
    } else {
         return false;
    }
}

為什么編譯器會抱怨“函數應該返回值”。 除非我遺漏了什么,否則它怎么能不歸還真或假? 是因為myCode的值是運行時相關的,所以編譯器在邏輯路徑上不確定?

如果你寫return (code == myCode); 你將保存線條,使編譯器滿意,並且通常用更多的C ++ - ish風格編寫。

如果所有分支都有return語句,VC ++和g ++將不會給出警告消息。 我猜你的編譯器(c ++ - builder-5)無法正確檢查以確定所有分支上是否有返回點。 或者在某個地方存在另一個條件,即您沒有向我們展示沒有返回語句。

您可以輕松地重構代碼(可能與發布的代碼類似),以獲得一個返回點,這將避免編譯器的警告。

做起來會更優雅

bool RequestStatus()
{
    return code == myCode;
}

這可能會消除您的編譯器消息/警告。

主觀上,我同意海報說你應該將它重構為一個簡潔的x == y return語句,但代碼沒有任何問題。 這是你的編譯器。

我想這是一個編譯器的不安。 您處於嵌套范圍內,編譯器可能正在檢查函數范圍內的return語句。

在你的例子中:

bool RequestStatus()
{
    ...
    if (code == myCode) {
         return true;
    } else {
         return false;
    }
}

if語句后會發生什么? 您需要在函數末尾使用return語句,以便覆蓋所有執行路徑。 您可以像這樣重構代碼:

bool RequestStatus()
{
    ...
    if (code == myCode) {
         return true;
    } 

    // else 
    return false;
}

甚至

return (code == myCode) ? true : false;

但另一個建議是

return ( code == myCode );

更清潔。

以下內容也可能會清除編譯器消息/警告。

bool RequestStatus()
{ 
   ...

   if (code == myCode) 
      return true;

   return false;
}

您的代碼是否真的像您剛剛發布的代碼片段一樣簡單?

在Delphi(也是Borland / CodeGear / Embarcadero產品)中,我在一段wtf代碼上遇到了同樣的“問題”,這實際上是一個嵌套的ifs-hell:

if test1 then
  if test2 then
    if test3 then
      if test4 then
        if test5 
          then ...
          else ...
      else
        if test5 
          then ...
          else ...
    else
      if test4 then
        if test5 
          then ...
          else ...
      else
        if test5 
          then ...
          else ...
//etc...

(實際上有5級嵌套ifs ......)如果有太多可能的分支,編譯器只會發出警告。

如果您的代碼在try/except塊中,並且有一個執行路徑通過異常而不初始化您的結果,您也可以收到警告。

暫無
暫無

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

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