我正在尝试通过 telnet 在 Linux 机器上安装 Cppcheck。我有 cppcheck-1.67.tar 文件并解压它。我没有看到任何可以为我安装它的东西。我以正确的方式处理这个问题吗?
我正在使用Cppcheck GUI来扫描我的项目(Cppcheck中的新功能,只是为了使用它),并希望在扫描项目时排除一些子文件夹.
使用cppcheck GUI扫描项目文件夹时如何排除某些子文件夹?
我在YouTube上观看了一些视频,并尝试排除此视频中显示的内容,但仍会扫描已排除的子文件夹.
提前致谢.
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.cpp并inc.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的错误.任何不同意见?
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 ...
我正在使用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工具,用于我的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行的内存泄漏,没有潜在缓冲区溢出的迹象.
我使用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 ++ …
.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) 我在使用 boost 库的项目上使用 cppcheck。这个库中的头文件包含大量的宏,我什至不在我的源代码中使用。尽管如此,cppcheck 会根据我认为无用的这些宏来探索路径。有没有办法告诉 cppcheck 忽略所有宏,除非它是使用 #define 在源代码中定义的?
cppcheck ×10
c++ ×6
c ×1
clang-tidy ×1
enums ×1
explicit ×1
installation ×1
legacy-code ×1
linux ×1
redundancy ×1
scanf ×1
warnings ×1