问题标签 [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.

0 投票
2 回答
443 浏览

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,并使用signedorunsigned char是类型不匹配。当然可以在类型之间进行转换,但这可能会导致 lint 试图防止的那种错误。

这个针对普通char类型的 lint 规则是错误的吗?

0 投票
2 回答
2419 浏览

c - PC-Lint (by Gimpel) 如何跨多个模块查看?

我在 C 代码库上使用 Gimpel 的 PC-Lint v8.00,并希望了解它如何遍历模块。PC-lint 手册仅说 PC-Lint “查看多个模块”。它是如何做到的?比如,是不是从一个模块开始,把所有相关的包含文件和源文件组合成一大段代码来分析?为了理解程序流程,它搜索多深?

在第二个相关问题中,我有一个用例,一次从代码库中提取一个 C 模块而不是将长列表中的每个 C 模块提供给 PC-Lint 对我来说是有益的。但是,如果我只提供一个 C 模块,它会自动找到它所依赖的其他 C 模块,并使用这些模块来了解指定 C 模块的程序流程吗?

0 投票
1 回答
809 浏览

performance - 加快静态分析工具 PC-Lint 的任何提示?有使用 .LOB 文件的经验吗?

我有兴趣了解影响 PC-lint-ing 时间的主要因素。我知道一些,例如-passes(#)哪些会增加 PC-Lint 花费的时间(线性增加?),或者减少输出的消息不会影响 lint 时间。我希望通过让你们中的一位对 lint 更有经验的人列出他们遇到的影响 lint 时间的主要因素来验证我对 lint 性能的理解。

另外,你们中的任何人都有使用 .lob 文件和 PC-Lint 的经验吗?你会说它对棉绒时间的影响有多大?

0 投票
1 回答
3052 浏览

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)为我正常工作。有什么建议么?

0 投票
2 回答
4831 浏览

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这样的选项,这可能会有所帮助,但我只是无法正确使用它们来避免对编译器头文件的分析。

两个问题:

  1. 如何防止 pc-lint 分析编译器头文件而只分析我的源代码文件?
  2. 如何将 pc-lint 集成到我正在使用的 Visual C++ 2008 Express 版本中?
0 投票
0 回答
729 浏览

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 目标。然后我也许可以选择要“编译”的单个文件。还是这个想法注定要失败?:)

0 投票
2 回答
4207 浏览

c++ - 排除 PC-Lint 中的所有消息

我正在为我的 C++ 项目使用PC-Lint 。有没有办法默认关闭所有错误和警告消息,这样我就可以明确地重新引入所需的消息?

我已阅读 PC-Lint 手册中题为“错误抑制选项”的章节,我能找到的最好的方法是将 wLevel 设置为 -w0 无消息(致命错误除外)

0 投票
0 回答
2181 浏览

c++ - Lint 无法识别 std::string 类

我正在尝试整理我的项目。但似乎 Lint 无法识别std::string,std::vector和等类std::queue。我lib-std.lnt也在使用配置文件,但没有用,面临如下错误。

错误 40:未声明的标识符“队列”

错误 40:未声明的标识符“字符串”

错误 10:期望结构或联合

有谁知道如何解决这个问题?


对于示例代码: -

==================================== 输出如下


--- 模块:snip.cpp (C++)

0 投票
1 回答
723 浏览

lint - 如何让 PC-Lint 在消息中打印完全限定的函数名称?

我正在使用 PC-Lint 生成一个 XML 文件,其中包含运行生成的所有警告。

该过程几乎完美无缺,但有一个相当烦人的异常。我无法获取消息格式来打印发现警告的完全限定函数名称。它只打印精简后的函数名称。没有命名空间,没有类名。

这是我使用的格式字符串(我在本文末尾的文档中包含了相关的格式信息):

因此,例如,为此:

我得到的错误是这样的(为了便于阅读,换行):

正如你所看到的,函数名是按照我想要/期望的foo而不是按照我的意愿编写的。Bar::foo

在有人问之前,对于-format字符串中的函数转义符号,我已经尝试过%iand %I; 两者都生成了相同的裸骨函数名称。

有谁知道是否有一种神奇的格式转义来获得完全限定的名称?


从 PC-Lint-format文档中:

%f = 文件名
(注意选项+ffn,代表“Full File Names”,可用于控制是否使用完整路径名)。
%l = 行号
%t = 消息类型(错误、警告等)
%n = 消息号
%m = 消息文本
%c = 列号
%C = 列号 +1
%i =调用函数
%% = 百分号%(...%) = 如果错误发生在文件中,则
有条件地包含由 ... 表示的信息。 \n = 换行符 \t = 制表符 \s = 空格 \a = 警报(变为 ASCII 7) \q = 引号 ( "" ) \ = 反斜杠 ( '\' )







0 投票
1 回答
2990 浏览

c - 为所有结构成员禁用 Lint Info 768

我不知道这是否是提出问题的正确地方,但无论如何我都会这样做。

我对 Lint 有疑问,我目前正在从另一个项目中迁移一些代码,并且有许多结构成员当前未在新项目中使用。当然,因为这个 Lint 抱怨:

信息 768:未引用全局结构成员 'foo'(第 89 行,文件 /path/header.h)

我现在想抑制这些消息(因为它们破坏了我们的构建),但我不想在全局范围内这样做,因为与迁移并行,正在实现代码并且我们希望防止不使用结构成员。所以我可以选择使用全局配置文件来抑制这些成员的消息(即 -esym(768, foo))。

但是我有这个问题:

foob​​ar::foo 和 foobar::bar 目前没有被使用,所以我想为整个 t_foobar 结构做一个 lint 异常,但是如果我使用 -esym(foo) 我也会为 t_tempfoobar::foo 做一个例外不想。我试过 -esym(768, t_foobar*) 但没有用。我也不能做内联异常,比如:

这没用。它工作的唯一方法是如果我在 Lint 的配置文件中执行 -e768。

您对如何完成此任务有任何建议吗?不必为每个成员写一个例外?这也有一个问题,即其他同名结构的成员也被排除在外。

谢谢你的帮助