c++ - 确定不安全转换的警告 clang

标签 c++ casting clang long-integer

我正在努力将遗留应用程序移植到 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/

相关文章:

c++ - 转换成本

c++ - clang_complete vim 扩展不适用于 STL

c++ - 如何在 clang-sanitizer 发现错误时终止 clang-instrumented 程序?

c++ - 通过包含访问函数与声明静态

c++ - 使用 JNI 从 C++ 库中加载特定类的方法

c++ - 此循环仅适用于第一次迭代

objective-c - 如何将 'Class A' 转换为其子类 'Class B' - Objective-C

c# - 将对象转换为通用接口(interface)

c++ - 使用 char 数组将大数相加

c++ - Clang++ Xcode 4.4 非静态成员初始化和移动构造函数