主要的开源项目使用哪些GCC标志来控制C和C++中的未定义行为?

wjl*_*wjl 6 c c++ gcc undefined-behavior

在处理未定义的行为时,主要的开源项目使用了一些GCC标志来解决编译器过于敏锐的问题,特别是在C和C++语言中.例如:

那还有什么?我显然可以从GCC文档中获取完整列表,其中标记将未定义的行为转换为什么样的实现定义行为.但是,我更感兴趣的是主要开源项目使用哪些选项以及为什么

zr.*_*zr. 4

-D_GLIBCXX_DEBUG 并不完全是一个编译器标志,但它启用了检查的 STL 迭代器和其他好东西。

std::vector<int> v(42);

v[42] = 1; //The standard says this is UB. With checked iterators you will get a run-time exception.
Run Code Online (Sandbox Code Playgroud)