我正在将遗留应用程序移植到 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,但没有成功。铿锵声中是否有一个标志来警告我这些类型的有风险的显式强制转换?如果没有,我该如何添加一个?