是否存在静态分析工具(C / C ++),它可以分析代码而无法编译它? (我问的原因是我的代码可能有一些外部SDK的功能)
答案 0 :(得分:2)
大多数静态分析工具(例如frama-C)不编译C代码,但通常需要其预处理形式。因此,它们需要您的代码使用的头文件的可用性。通常,他们只是为了获得预处理形式(即gcc -C -E
)
请注意,这些工具通常不需要或不关心您正在使用的库的二进制形式,只需要关注它们的头文件。
但是,我认为扩展编译器以增加更多静态分析能力是一个优势,因为分析器可以利用编译器完成的所有工作(以及提供的基础结构)。这是我(自由软件)GCC MELT工具的主要动机(您可以使用它来扩展GCC以进行某些特定的静态分析)。
一些静态分析仪 - 例如coccinelle - 能够处理未经处理的C代码(使用宏)。但是,他们需要一些方法来理解你的代码正在使用的宏(否则它们不能检查太多:宏调用可以扩展到数千个语句!)。
N.B。上面提到的所有分析仪都是免费软件。
答案 1 :(得分:1)
我多年来一直在使用它:FlexeLint