如何通过使用静态分析工具或编译器标志检测C ++代码中的“显式类型转换中潜在的精度损失”

例如:

    long long a = ....;
    int b;
    b = (int) a;

是否存在gcc标志或Sonarqube之类的静态分析工具可以检测到这种情况?

maduso 回答:如何通过使用静态分析工具或编译器标志检测C ++代码中的“显式类型转换中潜在的精度损失”

搜索显式类型转换是一项奇怪的任务。开发人员显然意味着他想使用显式类型转换“截断”高位。但是,我敢说这个任务实际上是不同的:必须将32位应用程序移植到64位平台上。在这种情况下,是的,检测危险的显式类型转换是非常相关的任务。如果是这样,那就有解决方案。在PVS-Studio分析仪中有一组与端口相关的特殊诊断。例子:

  • V202。从memsize类型显式转换为32位整数类型。
  • V220。类型转换的可疑序列:memsize-> 32位 整数-> memsize。
  • V221。类型转换的可疑序列: 指针-> memsize-> 32位整数。
  • others
,

您还可以尝试使用Clang作为C / C ++解析器的CppDepend,Clang会检测到此类问题。

本文链接:https://www.f2er.com/3161579.html

大家都在问