正如它主页 上所说, 虽然编译器在进步, 因而能报告越来越多的潜在错误/警告, 但pc-lint也同样在不断进步, 能报告更多的编译器仍然不能报告的潜在错误/警告.
网上普遍有下载8.0的, 确切的版本是8.00e, 作者维护这个工具很有意思, 提供了一系列的二进制patch, 在其主页上可以下载, 我是一口气从e-f, f-g, 一直下载到最新的w-x, 用下面的cygwin/bash命令可以一次性打好所有补丁.
for i in *.zip; do unzip $i; patch ${i%zip}rtp; done
压缩包里是扩展名为 RTP的文件.
这个patch只处理lint-nt.exe, 从网上下载来的原始文件包括两个完全相同的可执行文件(MD5验证过):
lint.exe
lint-nt.exe
其主页上有各种lnt文件, 头文件, 共158个, 我全数下载下来. 这是最新的, 网上默认下载下来的可不包括
VS.NET IDE的支持. 而最新的都已经支持到了VS2008.
参数极其复杂, 整个命令的驱动就是基于众多的参数的精细控制, 以适用不同的编译器, 适用不同的环境(主要是指输出结果的格式如何被各种宿主环境所理解, 如VC2008, vim等)
顺着其主页上的链接找到一个VisualLintAddin, 是VS2008的插件, 30天试用, 下来一试, 觉得不值, 没有提供多少额外的附加值, 程序UI上倒没少花功夫, 真正做的事就是根据 vcproj生成一个与项目文件同名, 扩展名为lnt的文件, 里面包含了你这个项目里面的所有源程序文件(不包括头文件), 当然那些项目的宏定义, 以及INCLUDE目录也都通过这个文件设定.
这个工具真正的意义在于它帮我生成了第一个近乎可用的lnt文件, 经过手工修改, 成功地达到我当前找这个工具的目的:
检查一个与printf相同函数原型的
LogPrintf 函数的格式字符串与实际参数是否匹配.
VC竟然不支持这样的警告. gcc通过下面的方式支持:
void LogPrintf(const char * fmtstr, ...)__attribute__((format(printf, 1, 2)));
void LogPrintf(const char * fmtstr, ...)
{
}
int main()
{
LogPrintf("%s", 123);
printf("%s", 123);
return 0;
}
|
要求是 __attribute__这种结构必需写在函数声明后面, 写在定义处不行, 声明与定义合作一处也不行.
VC也不支持 printf函数本身的检查.
初步印象: pc-lint很强大, 很难配, 会输出远远多于你想象的程序错误/警告, 在他面前你基本上就不懂写程序, 想让它如你所愿工作耐心调教各种参数和选项.
建议: 网上那个广泛流行的下载版也含有PDF的帮助文件, 40位的加密, 用工具可以很容易破解, 破解之后可以边看边作注释.
下面打算是花时间投资在这个工具上, pc-lint, 我看好你哟!
阅读(2236) | 评论(0) | 转发(0) |