• C++静态代码分析工具对比cppCheck与PreFast


    具体内容参看文件《CppCheck和PreFast对Cplusplus代码静态分析测试.zip》

    C++测试源代码main.cpp

    #define NULL 0

    #include <stdio.h>

    #include <string.h>

    // 没有初始化

    void defect1()

    {

             int a;

             int b;

             b = a;

    }

    // 空指针取值

    void defect2( int b, int c)

    {

             int * p = NULL;

             int a = 1 ;

             if (b == 1 )

             {

                       if (c == 1 )

                       {

                                p = & a;

                       }

                       else

                       {

                       }

             }

             else

             {

                       if (c == 1 )

                       {

                       }

                       else

                       {

                                p = & a;

                       }

             }

             * p;

             return ;

    }

    //可能错误的运算符优先级

    void defect3()

    {

             int a = 1 ;

             int b = 1 ;

             int c = 1 ;

             if (a & b == c)

                       return ;

    }

    //可能的buffer overrun

    void defect4()

    {

             char buf[ 100 ];

             char buf2[ 200 ];

             int i = 100 ;

             sprintf(buf, " hello world %d " , i);

             strcpy(buf, buf2);

    }

    // 可能的无穷循环

    void defect5()

    {

             signed char i;

             for (i = 100 ; i >= 0 ; i ++ ) {

                       ;

             }

    }

    // 格式字符串错误

    void defect6()

    {

             char buff[ 5 ];

             sprintf(buff, " %s %s " , " a " );

    }

    //=和==误用

    void defect7()

    {

             int a = 1 ;

             if (a = 2 )

                       return ;

    }

    // 逻辑运算问题

    void defect8()

    {

             int x;

             if ( 0 && x ++ ) {

                       ;

             }

    }

    void main()

    {

    }

    1、使用PreFast前后对比

    图1取消C/C++代码分析

    图2不使用PreFast时VS2010输出的警告

    图3 启用C/C++代码分析

    图4 使用PreFast时VS2010输出的警告

    2、Cppcheck对main.cpp源代码的分析结果

     

    图5 Cppcheck的分析结果

  • 相关阅读:
    【QT】对话框打开图像并用QPixmap显示
    【QT】打开文件对话框,选择路径下文件
    狄拉克下采样
    Linux 安装JDK(jdk-8u121-linux-x64.tar.gz)
    Linux 命令安装bin文件
    Python3 tesseract加载chi_sim异常停止工作
    Python3 pip出现Fatal error in launcher: Unable to create process using '"'
    Python3 判断文件和文件夹是否存在、创建文件夹
    Python3 itchat实现微信定时发送群消息
    Python3 实现(wxpy)用微信自动定时给朋友定时推广
  • 原文地址:https://www.cnblogs.com/coolbear/p/4014996.html
Copyright © 2020-2023  润新知