Wol*_*olf 4 static-analysis c++builder cppcheck
我使用 Cppcheck 1.70 检查 C++-Builder 项目。我收到很多这样的风格警告
[source\DbgRecMain.cpp:452]: (style) The function 'FormResize' is never used.
Run Code Online (Sandbox Code Playgroud)
这些函数是使用的事件处理程序,但不是在 C++ 代码中显式使用:它们在加载相应的表单或数据模块后由 VCL 运行时绑定。当然,Cppcheck 不会检查 DFM 文件,这就是为什么它无法检测其中定义的事件和处理程序之间的引用。
我想到的一些选择
如何专门抑制这些关于明显未使用的事件处理程序的警告?
CppCheck 文档中有一个关于抑制警告/错误的章节。第 6.2 章对您尤其有用,因为您将能够根据需要抑制有关各个事件处理程序的警告:
\n\n\n\n\n第 6 章 抑制
\n\n如果您想过滤掉某些错误,您可以抑制这些错误。
\n\n6.1. 抑制某种错误类型
\n\n您可以抑制某些类型的错误。这种抑制的格式是以下之一:
\n\nRun Code Online (Sandbox Code Playgroud)\n\n[error id]:[filename]:[line]\n[error id]:[filename2]\n[error id]\n这
\n\nerror id是您要抑制的 id。获取它的最简单方法是使用--xml命令行标志。复制并粘贴idXML 输出中的字符串。这可能是*为了抑制所有警告(针对指定的一个或多个文件)。可以
\n\nfilename包括通配符*或?,它们分别匹配任何字符序列或任何单个字符。建议您在所有操作系统上使用“/”作为路径分隔符。6.1.1. 命令行抑制
\n\n命令行选项
\n\n--suppress=用于在命令行上指定抑制。例子:Run Code Online (Sandbox Code Playgroud)\n\ncppcheck --suppress=memleak:src/file1.cpp src/\n6.1.2. 列出文件中的抑制内容
\n\n您可以创建抑制文件。例子:
\n\nRun Code Online (Sandbox Code Playgroud)\n\n// suppress memleak and exceptNew errors in the file src/file1.cpp\nmemleak:src/file1.cpp\nexceptNew:src/file1.cpp\n\n// suppress all uninitvar errors in all files\nuninitvar\n请注意,您可以在抑制文件中添加空行和注释。\n 您可以像这样使用抑制文件:
\n\nRun Code Online (Sandbox Code Playgroud)\n\ncppcheck --suppressions-list=suppressions.txt src/\n6.2. 内联抑制
\n\n还可以通过添加包含特殊关键字的注释来直接在代码中添加抑制。在添加此类注释之前,请考虑稍微牺牲代码可读性。
\n\n此代码通常会生成一条错误消息:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nvoid f() {\n char arr[5];\n arr[10] = 0;\n}\n输出是:
\n\nRun Code Online (Sandbox Code Playgroud)\n\n# cppcheck test.c\nChecking test.c...\n[test.c:3]: (error) Array \xe2\x80\x99arr[5]\xe2\x80\x99 index 10 out of bounds\n要抑制错误消息,可以添加注释:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nvoid f() {\n char arr[5];\n\n // cppcheck-suppress arrayIndexOutOfBounds\n arr[10] = 0;\n}\n现在该
\n\n--inline-suppr标志可用于抑制警告。这样调用cppcheck时不会报错:Run Code Online (Sandbox Code Playgroud)\ncppcheck --inline-suppr test.c\n
另请参阅以下问题以了解更多详细信息:
\n\n如何对 C++ 代码使用 cppcheck 的内联抑制过滤器选项?
\n\n\n