clang能否在编译时警告未定义的行为?

use*_*851 3 c++ clang undefined-behavior

#include <iostream>

int main()
{
    int n = -1000;
    for (int i(0); i != n; ++i)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

在gcc中,在编译时捕获以下错误:

main.cpp:6:5: warning: iteration 2147483647u invokes undefined behavior [-Waggressive-loop-optimizations]

     for (int i(0); i != n; ++i)
Run Code Online (Sandbox Code Playgroud)

Clang -fsanitize=undefined是一个运行时机制.clang的编译时间相当于什么?

rub*_*nvb 6

标准中经常描述未定义的行为,因为编译器在所有情况下都很难检查这一点.

你只遇到一个由GCC而不是Clang处理的案例.如果你看,你将能够找到由一个而不是另一个编译器处理的案例.那是因为它们不是相同的编译器,并且具有不同的分析.

  • 事实上,这是使用多个编译器编译代码以便在编译时获取更多问题的一个很好的理由. (4认同)