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