我使用 Visual Studio 2019 编译了简单的 UB 代码,没有任何警告或错误:
int main()
{
int i = 10;
i = i++ + ++i;
return i;
}
我已打开 EnableAllWarnings(/Wall) 并将警告视为错误 (/WX) 标志。 它编译成:
mov eax,17h
ret
因为编译器生成了这段代码,所以我确信他检测到了 UB。 为什么 MSVC 不生成任何有关 UB 的警告?
我已经检查过 Clang 和 GCC 是否对此示例给出了警告。 它们是否会针对任何可能的 UB 生成警告?如果是这样,为什么 MSVC 不这样做?
最佳答案
Clang and GCC gives warnings for this example. Do they generate warnings for any possible UB?
没有。许多事情被定义为“未定义的行为”而不需要诊断,正是因为它们极其难以(甚至理论上证明不可能)以 100% 的准确度进行检测。
关于c++ - MSVC C/C++ 编译器未定义行为警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59969816/