c++ - MSVC C/C++ 编译器未定义行为警告

标签 c++ visual-studio compiler-warnings undefined-behavior

我使用 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/

相关文章:

c++ - 比较给定宽度和高度的纵横比

c++ - 如何使数组的大小取决于构造函数参数?

c++ - 在 C++ 中,指针是否保证在 `delete` 之后保留其值?

visual-studio - Windows 8 SDK 中的 DirectShow 示例在哪里?

C++:为什么要编译? (将 this-Reference 传递给基类)

visual-studio - Visual Studio 2012 中的 EnvDTE 替代品

c++ - 如何解析文件路径

c++ - C++ 中 SFML 库的编译问题

ios - 编译器不符合 UIImagePickerControllerDelegate 协议(protocol)

编译器不显示任何错误或警告,但程序不工作