PC Lint(通过Gimpel)在多个模块中的外观如何?

PC Lint(通过Gimpel)在多个模块中的外观如何?,c,static-analysis,lint,pc-lint,C,Static Analysis,Lint,Pc Lint,我在C代码库上使用Gimpel的PC Lint v8.00,希望了解它如何遍历模块。PC lint手册只说PC lint“可以跨越多个模块”。它是如何做到这一点的?例如,它是否从一个模块开始,并将所有相关的包含文件和源文件合并到一大块代码中进行分析?为了理解程序流程,it搜索的深度有多深 在第二个相关问题中,我有一个用例,在这个用例中,一次从代码库中lint一个C模块,而不是将长列表中的每个C模块提供给PC lint,这对我是有益的。但是,如果我只提供一个C模块,它会自动找到它所依赖的其他C模块

我在C代码库上使用Gimpel的PC Lint v8.00,希望了解它如何遍历模块。PC lint手册只说PC lint“可以跨越多个模块”。它是如何做到这一点的?例如,它是否从一个模块开始,并将所有相关的包含文件和源文件合并到一大块代码中进行分析?为了理解程序流程,it搜索的深度有多深


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

PC Lint在解析源文件时创建某种运行时数据库,注意全局变量、外部声明等。 当它处理完所有编译单元(递归地处理包含所有文件的C文件)后,它会像链接器那样生成输出,但不是生成代码,而是报告某些类型的错误,例如:未使用的外部声明、未使用的原型(未实现)、未使用的全局函数。链接器并不总是报告这些问题,因为代码生成是非常可能的:这些项目从未在任何地方使用过

搜索深度可能会受到选项
-passes
的影响,该选项可以在牺牲执行时间的情况下实现更好的值跟踪。请参阅PDF手册第10.2.2.4节(9.x版)


对于第二个问题,不,如果在Lint命令行上只提供一个(或几个)源(C)文件名,PC Lint将只处理该文件,并且所有文件都包含递归使用的文件。您可能希望使用“单元签出”选项
-u
,告诉PC Lint它只处理整个项目的一部分。然后Lint将抑制某些类型的警告,这些警告对部分项目没有用处。

我认为原则上您是在询问Lint对象模块,请参阅Lint手册PDF的第9章。 使用say
lint-u a1.c-oo
处理a1.lob,然后再次可以使用
lint*.lob
链接在一起以生成模块间消息


你还问了一个相关的、具体的问题(),但我不确定我是否理解你对“你认为它对起毛时间的影响有多大?”的担忧,因为我会说这要视情况而定。您当前的皮棉时间/速度是多少?几年前你发过帖子,那么在一台新机器上运行这个任务怎么样,新cpu?谢谢。你能详细说明一下编译单元递归处理的顺序吗。PC Lint是否会继续处理每个包含的文件,直到它不能再这样做,然后以其方式进行备份?另一种说法是用一棵树。lint将创建树,然后从树的叶子开始处理每个文件,并返回到根。例如,如果我有一个包含x1.h的c文件,而x1.h又包含x2.h和x3.h。我希望lint处理x2.h、x3.h、x1.h,最后是cfile。这是正确的吗?每个C文件都像编译器一样处理。对于每个编译单元,Lint都会查看包含的头文件并对其进行处理,如果它们包含更多的头文件,则会对其进行递归处理,等等。一个接一个地处理C文件,直到所有文件都处理完毕。因此,在您的示例中,它将开始读取C文件,当包含x1.h时,它将处理x1.h直到包含x2.h,以此类推。处理完所有包含的文件后,它将处理C文件的其余部分并完成.Ok。从我在输出中看到的情况来看,如果两个源文件包含相同的头文件,则会对每个源文件分析该头文件一次,从而重复其消息。我认为这会给我的输出文件增加不必要的混乱。PC Lint这样做有充分的理由吗?有没有办法告诉PC Lint记住以前的Lint头文件,并在再次遇到时忽略它们?基本上没有,因为Lint合理地假设一个编译单元的头警告可能不适用于另一个编译单元(例如,如果您不使用它之前抱怨的宏。但是,您可以在PC Lint 9.0手册第7章中查看是否可以使用预编译头和/或绕过头。它还将说明在某些情况下可能需要重复处理的一些原因。