问题标签 [pc-lint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 针对普通字符的 PC-lint / Flexelint 规则
Gimpel Software 的 PC-lint 和 Flexelint 有一条规则"971: Use of 'char' without 'signed' or 'unsigned'",禁止使用char
没有指定签名的普通类型。
http://www.gimpel.com/html/pub/msg.txt
我认为这是误导。如果char
用作整数类型,那么显式指定签名可能是有意义的,但在用于文本字符时则不然。标准库函数,例如printf
将指针指向 plain char
,并使用signed
orunsigned char
是类型不匹配。当然可以在类型之间进行转换,但这可能会导致 lint 试图防止的那种错误。
这个针对普通char
类型的 lint 规则是错误的吗?
c - PC-Lint (by Gimpel) 如何跨多个模块查看?
我在 C 代码库上使用 Gimpel 的 PC-Lint v8.00,并希望了解它如何遍历模块。PC-lint 手册仅说 PC-Lint “查看多个模块”。它是如何做到的?比如,是不是从一个模块开始,把所有相关的包含文件和源文件组合成一大段代码来分析?为了理解程序流程,它搜索多深?
在第二个相关问题中,我有一个用例,一次从代码库中提取一个 C 模块而不是将长列表中的每个 C 模块提供给 PC-Lint 对我来说是有益的。但是,如果我只提供一个 C 模块,它会自动找到它所依赖的其他 C 模块,并使用这些模块来了解指定 C 模块的程序流程吗?
performance - 加快静态分析工具 PC-Lint 的任何提示?有使用 .LOB 文件的经验吗?
我有兴趣了解影响 PC-lint-ing 时间的主要因素。我知道一些,例如-passes(#)
哪些会增加 PC-Lint 花费的时间(线性增加?),或者减少输出的消息不会影响 lint 时间。我希望通过让你们中的一位对 lint 更有经验的人列出他们遇到的影响 lint 时间的主要因素来验证我对 lint 性能的理解。
另外,你们中的任何人都有使用 .lob 文件和 PC-Lint 的经验吗?你会说它对棉绒时间的影响有多大?
static-analysis - PC-Lint 将标头视为库标头
使用 PC-Lint,我试图将头文件视为库头,以便我可以抑制其中的消息。我正在使用库模块选项+libm(module.c)
,该选项应将 module.c 视为库模块,并将它包含的任何头文件(即 module.h)视为库头文件,如 v9.00 的 PC-Lint 手册第 6.1 节所述。当然,module.h 也包含在我的不是库模块的源文件中。
问题是,当我对代码进行 lint 时,即使我提供了+libm(module.c)
选项,我仍然会从 module.h 收到消息。我怀疑这是因为 module.h 文件包含在我的其他非库模块中。但是这种情况是一个典型的用例,所以这使得这个+libm
选项毫无用处。我知道我可以使用+libh(module.h)
或者+libdir(...)
但我想+libm(module.c)
为我正常工作。有什么建议么?
static-analysis - 如何将 PC-lint 与 Visual C++ 2008 集成
我的公司有 PC-lint 可执行文件 lint-nt.exe。
我正在尝试使用它来将 PC-lint 与 MS Visual Studio 2008 集成以分析.c/ .cpp 源。但我没有成功让它发挥作用。
我读:
http://www.gimpel.com/html/pub80/env-vc9.lnt
以及一两个其他网站上的类似此类信息,但没有成功。
我按照指示的步骤在 Visual C++ 8 中添加了一个外部工具,但是当我单击新添加的工具时,pc-lint 窗口会立即打开并立即关闭,我怀疑它是否运行了任何分析。所以它不适合我。
然后我尝试在 Windows 命令提示符下运行 lint-nt.exe
lint-nt.exe +fce +fcp +cpp(cpp,cxx,cc) -i"C:\Program Files\Microsoft Visual Studio 9.0\VC\include" +libdir +libh myfile.cpp
它确实执行了分析,但它分析了 Visual C++ INCLUDE 文件夹(limits.h sal.h iostream 等)中的许多头文件,因为我的源文件有#include <iostream>
等等。
编辑:我看到 pc-lint 有 options+/-libdir
和+/-libh
这样的选项,这可能会有所帮助,但我只是无法正确使用它们来避免对编译器头文件的分析。
两个问题:
- 如何防止 pc-lint 分析编译器头文件而只分析我的源代码文件?
- 如何将 pc-lint 集成到我正在使用的 Visual C++ 2008 Express 版本中?
visual-studio - CMake 并在 Visual Studio 中的文件级运行 PC-Lint
有没有办法为 CMake 生成的 Visual Studio 项目中的特定文件或整个项目运行 PC-Lint?
目前,我可以通过使用Kitware 的脚本创建自定义目标来为每个项目运行 PC-Lint ,但在我的环境中,整个项目的 linting 可能需要长达 10 分钟。因此,我还希望能够仅对特定的源文件进行 lint(并从 Visual Studio 中选择该文件)。
我在想,如果 PC lint 可以用作自定义“编译器”并为我的目标创建另一个使用 lint“编译器”的 project_LINT 目标。然后我也许可以选择要“编译”的单个文件。还是这个想法注定要失败?:)
c++ - 排除 PC-Lint 中的所有消息
我正在为我的 C++ 项目使用PC-Lint 。有没有办法默认关闭所有错误和警告消息,这样我就可以明确地重新引入所需的消息?
我已阅读 PC-Lint 手册中题为“错误抑制选项”的章节,我能找到的最好的方法是将 wLevel 设置为 -w0 无消息(致命错误除外)
c++ - Lint 无法识别 std::string 类
我正在尝试整理我的项目。但似乎 Lint 无法识别std::string
,std::vector
和等类std::queue
。我lib-std.lnt
也在使用配置文件,但没有用,面临如下错误。
错误 40:未声明的标识符“队列”
错误 40:未声明的标识符“字符串”
错误 10:期望结构或联合
有谁知道如何解决这个问题?
对于示例代码: -
==================================== 输出如下
--- 模块:snip.cpp (C++)
lint - 如何让 PC-Lint 在消息中打印完全限定的函数名称?
我正在使用 PC-Lint 生成一个 XML 文件,其中包含运行生成的所有警告。
该过程几乎完美无缺,但有一个相当烦人的异常。我无法获取消息格式来打印发现警告的完全限定函数名称。它只打印精简后的函数名称。没有命名空间,没有类名。
这是我使用的格式字符串(我在本文末尾的文档中包含了相关的格式信息):
因此,例如,为此:
我得到的错误是这样的(为了便于阅读,换行):
正如你所看到的,函数名是按照我想要/期望的foo
而不是按照我的意愿编写的。Bar::foo
在有人问之前,对于-format
字符串中的函数转义符号,我已经尝试过%i
and %I
; 两者都生成了相同的裸骨函数名称。
有谁知道是否有一种神奇的格式转义来获得完全限定的名称?
从 PC-Lint-format
文档中:
%f = 文件名
(注意选项+ffn,代表“Full File Names”,可用于控制是否使用完整路径名)。
%l = 行号
%t = 消息类型(错误、警告等)
%n = 消息号
%m = 消息文本
%c = 列号
%C = 列号 +1
%i =调用函数
%% = 百分号%(...%) = 如果错误发生在文件中,则
有条件地包含由 ... 表示的信息。 \n = 换行符 \t = 制表符 \s = 空格 \a = 警报(变为 ASCII 7) \q = 引号 ( "" ) \ = 反斜杠 ( '\' )
c - 为所有结构成员禁用 Lint Info 768
我不知道这是否是提出问题的正确地方,但无论如何我都会这样做。
我对 Lint 有疑问,我目前正在从另一个项目中迁移一些代码,并且有许多结构成员当前未在新项目中使用。当然,因为这个 Lint 抱怨:
信息 768:未引用全局结构成员 'foo'(第 89 行,文件 /path/header.h)
我现在想抑制这些消息(因为它们破坏了我们的构建),但我不想在全局范围内这样做,因为与迁移并行,正在实现代码并且我们希望防止不使用结构成员。所以我可以选择使用全局配置文件来抑制这些成员的消息(即 -esym(768, foo))。
但是我有这个问题:
foobar::foo 和 foobar::bar 目前没有被使用,所以我想为整个 t_foobar 结构做一个 lint 异常,但是如果我使用 -esym(foo) 我也会为 t_tempfoobar::foo 做一个例外不想。我试过 -esym(768, t_foobar*) 但没有用。我也不能做内联异常,比如:
这没用。它工作的唯一方法是如果我在 Lint 的配置文件中执行 -e768。
您对如何完成此任务有任何建议吗?不必为每个成员写一个例外?这也有一个问题,即其他同名结构的成员也被排除在外。
谢谢你的帮助