簡體   English   中英

為什么即使保證返回,我也會收到警告“控制到達非空函數的結尾”

[英]Why do I get the warning 'control reaches end of non-void function' even when the return is guaranteed

我明白,鑒於代碼永遠不會進入循環,會給我錯誤。 然而,假設r等於1 ,它應該返回它,它總是輸入它。

int arroz() {

    int r = 1;
    while (r) {
        return r;
    }
}

那么,為什么這段代碼會給我警告控制到達非空函數的結尾?

編譯器正確地假定r是一個變量值,它不會將其作為常量處理,在這種情況下,它無法確定該值將是什么,因此無法確定循環體是否會被執行。

如果您使用常量,警告就會消失,因為編譯器將使用常量值組裝代碼。

您可以在此處檢查此行為。

IMO 這是編譯器中的一個錯誤。 分析器應該看到沒有避免return語句的執行路徑。 該變量不是volatile

代碼編譯為:

arroz:                                  # @arroz
        mov     eax, 1
        ret

這表明編譯器知道它總是會返回 1

你應該報告錯誤。

暫無
暫無

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

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