日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在PHP中,for循環是一種常見的迭代結構,用于重復執行一段代碼。然而,有時候我們可能會在帶條件的for循環中忘記添加return語句,這會導致程序無法正常返回結果。在這種情況下,php小編魚仔建議及時檢查代碼,確保在循環中添加合適的return語句,以避免出現意外的錯誤。這樣可以確保代碼的可靠性和正確性,提高程序的效率和可維護性。

問題內容

我注意到,當我編寫以下代碼時,編譯器會產生 missing return statements 錯誤:

// Similar loops make sense in retry patterns
// but this is just a simple example
func TestMethod() int {
    for i := 0; i < 10; i++ {
        return 0
    }
}

登錄后復制

這是在以下編譯時沒有任何錯誤的情況下:

func TestMethod() int {
    for {
        return 0
    }
}

登錄后復制

第一個代碼在邏輯上和技術上都很好,因為該方法不可能無法返回。編譯器顯示該錯誤有什么原因嗎?或者是某種缺失的邏輯或錯誤?

解決方法

將@Cerise Limón 的評論擴展為答案,“第一個代碼……技術上很好”的斷言是錯誤的。

Go 語言規范是這么說的:

還有還有這個:

(重點是我添加的)

檢查第一個函數中的代碼,我們可以看到不滿足規范的這些條件:

func TestMethod() int {
    for i:= 0; i < 10; i++ {
        return 0
    }
}

登錄后復制

該函數有一個結果參數(int 返回值),因此必須以終止語句結束,但該函數的最終語句是 for 語句帶有條件,即 不是規范所定義的“終止語句”。

這可能看起來很奇怪,但實際上在技術上是正確的。

獎勵材料

那么為什么第二個函數沒問題呢?

func TestMethod() int {
    for {
        return 0
    }
}

登錄后復制

在本例中,該函數中的最終語句是 for,其中無條件 沒有引用 for 循環的break 語句 ,滿足終止語句的語言規范定義。

工作中有邏輯。

如果沒有條件的 for 語句包含 break,則循環可能終止,因此該函數需要 return 語句。

如果沒有條件的 for 語句包含 break (并且沒有 return 語句),則循環將不會終止(至少不會作為正常執行路徑的結果)需要函數返回值)。

還值得注意的是,沒有控制流分析來確定任何 break 語句是否可達; 它們只需要存在。例如即使 break 明顯無法訪問,以下內容也會觸發“缺少返回”編譯錯誤:

func foo() int {
    for {
        if false {
            break
        }
        return 0
    }
    // <-- error: missing return
}

登錄后復制

分享到:
標簽:編譯錯誤
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定