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

时间:2023-01-06 14:56:42

具体内容参看文件《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的分析结果