[英]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.