标签: cppcheck

如何在 Linux 上使用 tar 文件安装 Cppcheck?

我正在尝试通过 telnet 在 Linux 机器上安装 Cppcheck。我有 cppcheck-1.67.tar 文件并解压它。我没有看到任何可以为我安装它的东西。我以正确的方式处理这个问题吗?

linux installation cppcheck

8
推荐指数
2
解决办法
2万
查看次数

Cppcheck GUI:从检查中排除文件或文件夹

我正在使用Cppcheck GUI来扫描我的项目(Cppcheck中的新功能,只是为了使用它),并希望在扫描项目时排除一些子文件夹.

使用cppcheck GUI扫描项目文件夹时如何排除某些子文件夹?

我在YouTube上观看了一些视频,并尝试排除此视频中显示的内容,但仍会扫描已排除的子文件夹.

提前致谢.

static-analysis configuration-files cppcheck

8
推荐指数
2
解决办法
4713
查看次数

cppcheck认为我有"冗余代码:找到一个以数字常量开头的语句"

Cppcheck(版本1.46.1)为这样的枚举提供以下警告:

enum DATABASE_TYPE
{
    DATABASE_TYPE_UNKNOWN = -1, // <- line of warning
    DATABASE_TYPE_ORACLE,
    DATABASE_TYPE_MSACCESS
};
Run Code Online (Sandbox Code Playgroud)

冗余代码:找到一个以数字常量开头的语句

我不认为,这是多余的.能够做这样的事情是非常重要的.

这是cppcheck的错误还是我没有看到什么?

更新

我设法把它归结为一个最小的例子.cppcheck有两个(进一步的)错误,这看起来像我的减少没有任何影响.
有5个文件:a.h,a.cpp,b.h,b.cppinc.h具有以下内容.
VC9在没有警告的情况下编译它(警告级别4).

// a.h
#pragma once
#include "inc.h"

// a.cpp
#include "a.h"
#include "b.h"

int main()
{
    return 0;
}


// b.h
#pragma once
#include "inc.h"

// b.cpp
#include "b.h"

//inc.h
#pragma once

enum MY_ENUM_TYPE
{
    INVALID_VALUE = -1,
    FIRST_VALUE,
    SECOND_VALUE
};
Run Code Online (Sandbox Code Playgroud)

所以到现在为止,我非常有信心这是一个cppcheck的错误.任何不同意见?

c++ enums redundancy warnings cppcheck

7
推荐指数
1
解决办法
3347
查看次数

scanf Cppcheck警告

Cppcheck为scanf显示以下警告:

Message: scanf without field width limits can crash with huge input data. To fix this error message add a field width specifier:
    %s => %20s
    %i => %3i

Sample program that can crash:

#include 
int main()
{
    int a;
    scanf("%i", &a);
    return 0;
}

To make it crash:
perl -e 'print "5"x2100000' | ./a.out

我无法崩溃这个程序输入"巨大的输入数据".我应该输入什么才能让这次崩溃?我也不明白这个警告中最后一行的含义:

perl -e ...

c scanf cppcheck

7
推荐指数
1
解决办法
7446
查看次数

无法从cppcheck生成XML输出

我正在使用cppcheck进行C代码的静态分析,但似乎无法获得XML.我要求Jenkins使用XML文件

这是我到目前为止所尝试的:

runcppcheck.sh

#!/bin/sh
cd obj/msc
cppcheck --enable=all -I. -I. -I. -I. -I. -I. -I. -I. -I. -I. -I. /usr/include/ -I. obj/fap/ \
-DSUNOS -DSS -DSS_MT -DANSI -D_GNU_SOURCE -DSS_LINUX -D_REENTRANT -D__EXTENSIONS__ -DSUNOS -DCNS_PH1 -DDBG_TIMESTAMP -DLX_PRNT_TIMESTAMP \
-DDEBUGP -DLX -DLCLXT -DLXT_V1 -DLCLXUILXT -DLCXULILXT -DXU  -DLX -DLCLLX  -DSM -DLWLCLLX -DLCLXMILLX -DLCSMLXMILLX -DHR -DLX -DLCHRT \
-DLCHRUIHRT -DLCHRLIHIT -DLCLXLIHRT -DXU -DLCXULIHRT  -DLX -DLX_RTP -DLX_FASTRC -DCMINET_BSDCOMPAT -DSS_TICKS_SEC=100 -DCMFILE_REORG_1 \
-DCM_INET2 -D_GNU_SOURCE -DCMFILE_REORG_2 -DSSINT2 -DCMKV2 -DHI_MULTI_THREADED -DxCM_PASN_DBG -DxCCPU_DEBUG -DxRNC_OUTPUT_CONSOLE \
-DxCCPU_DEBUG_TRACE -DCCPU_DEBUG1 -DSS_PERF …
Run Code Online (Sandbox Code Playgroud)

cppcheck

7
推荐指数
1
解决办法
6280
查看次数

为什么Cppcheck没有找到这个明显的数组越界错误?

我安装了Cppcheck工具,用于我的C++项目的静态代码分析,并感觉它表现不佳.例如,任何人都可以告诉我为什么 Cppcheck无法在以下代码中找到数组越界错误?

void f(int c) { 
    char *p = new char[10]; 
    p[c] = 42; 
} 

void g() { 
    f(100); 
} 
Run Code Online (Sandbox Code Playgroud)

有一个在线演示,可以使用Cppcheck方便地检查此代码.所有它提到的是第4行的内存泄漏,没有潜在缓冲区溢出的迹象.

c++ code-analysis static-code-analysis cppcheck

7
推荐指数
2
解决办法
3717
查看次数

我真的应该大量介绍显式关键字吗?

当我在我的代码1上使用(最近发布的)Cppcheck 1.69时,它显示了很多消息,我没有预料到;-)禁用noExplicitConstructor证明了所有这些消息都属于这种类型.

但是我发现我不是唯一一个有很多新的Cppcheck消息的人,看看LibreOffice的分析结果(我可以公开展示):

在此输入图像描述

有经验的程序员会做什么:

  • 取消支票?
  • 大量介绍explicit关键字?

1 编辑:这当然不是我的代码,而是我必须处理的代码,它是遗留代码:C和C++在几种(预)标准风格中的混合,并且它是一个相当大的代码库.

c++ explicit legacy-code cppcheck

7
推荐指数
1
解决办法
1720
查看次数

该代码在cppcheck中是否为假阳性?

我使用cppcheck分析了一些代码,以了解错误和代码质量。我遇到了一个错误,我认为这是一个误报。下面的代码示例演示了该问题(带有注释)。

cppcheck-1.89版

#include <string>
#include <vector>
#include <iostream>

std::string func() {
    std::vector<char> data{};
    data.push_back('a');
    data.push_back('b');
    data.push_back('c');
    return std::string{ data.data(), data.size() }; // error marked here
    // severity: error
    // line: 12
    // summary: Returning object that points to local variable 'data' that will be invalid when returning.
}

int main() {
    std::string ret{};
    {
        ret = func();
    }
    std::cout << ret << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用()而不是{},它可以解决该错误。

编辑

当我用()或调试示例时{},完全没有区别。我将Visual Studio 17与C ++ …

c++ cppcheck

7
推荐指数
1
解决办法
137
查看次数

使用配置文件禁用或启用 cppcheck 警告

.clang-tidy使用 clang-tidy 静态分析器,我可以在项目的根目录中 保留一个文件 ( ),其中包含我想要激活或停用的警告。clang-tidy将查找此文件(据我所知)并使用其中定义的选项。这使我不必在 CMake 或 Makefile 中对长命令行进行硬编码。

cppcheck静态分析器可以做同样的事情吗?

目前我有这个很长的命令行硬编码:

cppcheck --max-ctu-depth=3 --enable=all --inline-suppr --suppress=*:*thrust/complex* --suppress=missingInclude --suppress=syntaxError --suppress=unmatchedSuppression --suppress=preprocessorErrorDirective --language=c++ --std=c++14 --error-exitcode=666
Run Code Online (Sandbox Code Playgroud)

.clang-tidy这是我保存在项目根目录下的配置文件示例:

---
Checks: '
    *,
    -readability-magic-numbers,
    -modernize-use-nodiscard,
    -altera-struct-pack-align,
    -cert-err58-cpp,
    -cppcoreguidelines-avoid-non-const-global-variables,
    -cppcoreguidelines-macro-usage,
    -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
    -cppcoreguidelines-pro-type-vararg,
    -cppcoreguidelines-avoid-magic-numbers,
    -fuchsia-default-arguments-calls,
    -fuchsia-trailing-return,
    -fuchsia-statically-constructed-objects,
    -fuchsia-overloaded-operator,
    -hicpp-vararg,
    -hicpp-no-array-decay,
    -llvm-header-guard,
    -llvmlibc-restrict-system-libc-headers,
    -llvmlibc-implementation-in-namespace,
    -llvmlibc-callee-namespace
'
WarningsAsErrors: '*'
HeaderFilterRegex: '.'
AnalyzeTemporaryDtors: false
FormatStyle: file
...
Run Code Online (Sandbox Code Playgroud)

c++ configuration-files cppcheck clang-tidy

7
推荐指数
1
解决办法
4692
查看次数

使用 cppcheck 而不定义所有宏

我在使用 boost 库的项目上使用 cppcheck。这个库中的头文件包含大量的宏,我什至不在我的源代码中使用。尽管如此,cppcheck 会根据我认为无用的这些宏来探索路径。有没有办法告诉 cppcheck 忽略所有宏,除非它是使用 #define 在源代码中定义的?

c++ cppcheck

6
推荐指数
2
解决办法
6860
查看次数