【发布时间】:2014-10-23 07:28:25
【问题描述】:
#include <iostream>
int main()
{
int n = -1000;
for (int i(0); i != n; ++i)
{
}
}
在 gcc 中,在编译时会捕获以下错误:
main.cpp:6:5: warning: iteration 2147483647u invokes undefined behavior [-Waggressive-loop-optimizations]
for (int i(0); i != n; ++i)
Clang 的-fsanitize=undefined 是一种运行时机制。 clang 的编译时等价物是什么?
【问题讨论】:
-
这似乎是 GCC 的一个最近的特性(它在 4.9 中,但不是 4.8)。如果 Clang 还没有它,我不会感到惊讶。当然,很多这样的实例不能在运行时被捕获;这只有效,因为
n的值在编译期间是已知的。 -
-Wall会在编译时捕获导致 UB 的内容作为警告。 -
@Rapptz 但它不适用于这种情况,这是一个公认的非常具体的问题。
-
@simpleBob:我敢肯定,这个特别的人可能会被抓到。但是,是的,跟踪所有这些事情确实变得非常复杂。
标签: c++ clang undefined-behavior