我正在努力将遗留应用程序移植到 Linux 上的 64 位。有很多地方可以互换使用 long 和 int,而且源代码相当大,因此很难通过测试捕获所有这些地方。我打算使用插件来静态分析代码并修复不安全的代码。一种这样的模式是
void foo(unsigned long *x){
*x = *x + 1; //x is pointing to a 32-bit space
return;
}
int main(){
unsigned int x = ;
foo(reinterpret_cast<unsigned long*>(&x));
}
我们使用 gcc-4.2.1 来构建我们的应用程序。即使启用了 -Wall 和 -Wextra,它也不会警告我这些类型的转换。
我尝试使用 -Weverything 运行 clang,但没有成功。 clang 中是否有一个标志来警告我这些类型的风险显式转换?如果没有,我该如何添加一个?
最佳答案
我认为 clang 不会直接警告您正在寻找的情况。然而,创建一个检测 C 风格转换和/或 reinterpret_cast<>()
的所有使用的插件相当简单。秒。 tools/clang/examples/PrintFunctionNames
中有一个如何创建插件的示例目录,如果你有一个源代码树。如果您位于伦敦地区,您可能会对 my presentation 感兴趣下周一。
关于c++ - 确定不安全转换的警告 clang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13508076/