繁体   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