我使用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和GCC在此示例中给出警告。它们是否为任何可能的UB生成警告?
没有许多事情被定义为“不确定行为”,而不是需要诊断,正是因为它们极其难以(甚至从理论上证明是不可能)以100%的准确性进行检测的。]