Cppcheck简单测评

测评代码如下:

#include <cstdio>
#include <string>
int main(void)
{
 // 多了或者少了格式化参数
 ::printf("%d%d%d\n", int(1), int(2));
 ::printf("%d%d%d\n", int(1), int(2), int(3), int(4));
 // 格式化类型不正确
 ::printf("%s\n", std::string("test"));
 ::printf("%d\n", std::string("test"));
 ::printf("%d\n", float(12.34));
 ::printf("%f\n", int(1));
 // 越界
 int a[10] = {0};
 a[10] = 10;
 int b[10] = {0};
 for (int i; i < 11; ++i)
 {
  b[i] = 10;
 }
 for (int i = 0; i < 11; ++i)
 {
  b[i] = 10;
 }
 // 字符串比较的典型错误
 bool bl;
 bl = ("123" == std::string("123").c_str()); // 此处错误没有找到
 if (bl)
 {
 }
 // Cppcheck的一个bug
 std::string str("123");
 ::printf("%d", ("123"==str ? int(1) : int(2))); // 此处误报
 ::system("pause");
 return 0;
}

结果图

Cppcheck简单测评_第1张图片

有误报,有的错误没找到,但瑕不掩瑜。

你可能感兴趣的:(C++,cppcheck)