gpt4 book ai didi

C++ while 循环优化不能正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:47 24 4
gpt4 key购买 nike

我有这段代码:

#include <stdio.h>

int main(int argc, const char** argv)
{
int a = argv[0][0];
int b = argv[0][1];

while ((a >= 0) &&
(a < b))
{
printf("a = %d\n", a);
a++;
}

return 0;
}

我正在用 gcc-4.5 -02 -Wstrict-overflow=5 编译它。

编译器对我大吼大叫警告:假设将 X +- C1 cmp C2 更改为 X cmp C1 +- C2 时不会发生有符号溢出

这到底是什么意思?

如果我是正确的,这个循环永远不会导致溢出,因为要增加 a,它必须小于另一个整数。如果它更大,则循环终止。

任何人都可以向我解释这种行为吗?

最佳答案

编译器正在优化转换a + 1 < ba < b - 1 .但是,如果 bINT_MIN那么这将下溢,这是行为的变化。这就是它的警告。

当然,你可能会说这是不可能的,但编译器的资源有限,通常不会对数据路径进行深入分析。

添加一个检查 b >= 0可能会解决问题。

编辑:另一种可能性是它正在移动 a >= 0到循环之外,因为(假设没有溢出)它永远不会改变。同样,该假设可能不适用于所有输入(即如果 b 为负)。您需要检查最终装配以了解它实际做了什么。

关于C++ while 循环优化不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23906389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com