【发布时间】:2021-08-06 18:32:44
【问题描述】:
根据 g++ 手册页及其网站 https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html ,以下代码在使用 -O3 -Wstrict-overflow=5 编译时应产生警告:
#include <iostream>
#include <limits>
int
main() {
int x{std::numeric_limits<int>::max()};
if(x+1 > x) std::cout << "Hello";
}
https://godbolt.org/z/57ccc33f3
它甚至输出“Hello”,表明它优化了 check(x+1 > x)。但是我没有收到任何警告。我是否误解了这个警告的含义或者这是一个 gcc 错误?我在他们的错误数据库中找不到任何东西。
【问题讨论】:
-
“Bug”有点强。永远不能保证编译器能够检测到所有溢出,无论它们对您来说多么明显。值得一提的是,当变量为编译时常量时,它似乎确实检测到了溢出。
-
"-Wstrict-overflow=1" "警告有问题且容易避免的情况。例如,编译器将 x + 1 > x 简化为1."。你的情况甚至是 1 级