Mar*_*ark 6 c embedded pc-lint
我有一个项目,其中包括一个大型的第三方库,我需要确保该项目不含棉绒.但是,该库有几千个错误.
修改库以删除这些不是一个选项 - 通常如何处理?
目前,代码是使用Keil uVision构建的,这是PC-Lint的调用方式,如果这仍然是最好的情况.
有没有办法指定这些是库文件,所以不应该分析?
谢谢.
以下是来自Gimpel网站的信息,我相信它涵盖了您正在寻找的选项(大胆添加以强调):
Lint使用"library"标头的标签来指定程序员无法控制的头文件(例如编译器头文件).默认情况下,所有来自外部目录的#includes或包含在<>中的#includes都被视为"库". 这可以通过使用+ libclass选项进行修改,并进一步使用+/- libdir和+/- libh选项进行微调.然后,您可以使用-wlib,-elib和-elibsym选项来控制从库头发出的消息. 随PC-lint一起分发的编译器选项文件通常包含-wlib(1)选项,该选项将库头的lint输出限制为仅错误(抑制警告和信息消息).
你可以找到在金培尔网站的详细信息在这里.
另外,如果我没记错的话,-wlib(0)会抑制所有库错误和警告......而不是上面提到的-wlib(1).当我回去工作时,我将不得不仔细检查.我没有手册的副本.
- -编辑 - -
如果是一个选项,我会将与库关联的所有文件放在不同的目录中.在Keil中,您可以转到"工具 - >设置PC-Lint".然后将新目录添加到"PC-Lint包含文件夹"列表中.然后,您的-wlib(0)选项应将这些标头视为"外来",而不是返回错误.当然,您还必须修改项目设置以编译库文件.
--- EDIT2新增示例---
好的,所以这是一个小测试,我试图确保我的建议可行.我在名为"ex_lib"的目录中创建了一个项目,并将项目命名为lib_test.在"Source Group 1"中,我创建并添加了文件"main.c":
main.c中
#include <lib_test.h>
int main (void)
{
uint16_t x = 5;
uint16_t y = 10;
uint16_t total1 = 0;
uint16_t total2 = 0;
uint16_t total3 = 0;
uint16_t total4 = 0;
total1 = add(x,y);
total2 = sub(x,y);
total3 = mult(x,y);
total4 = div(x,y);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后,我创建了一个名为"library"的子目录,并在该目录中创建了另一个名为library的项目.库项目由以下文件"lib_test.h"和"lib_test.c"组成.
lib_test.h
#ifndef LIB_TEST__
#define LIB_TEST__
#include <stdint.h>
extern uint16_t add(uint16_t x, uint16_t y);
extern uint16_t sub(uint16_t x, uint16_t y);
extern uint16_t mult(uint16_t x, uint16_t y);
extern uint16_t div(uint16_t x, uint16_t y);
#endif /* LIB_TEST__ */
Run Code Online (Sandbox Code Playgroud)
lib_test.c
#include "lib_test.h"
uint16_t add(uint16_t x, uint16_t y)
{
return (x + y);
}
uint16_t sub(uint16_t x, uint16_t y)
{
return (x - y);
}
uint16_t mult(uint16_t x, uint16_t y)
{
return (x * y);
}
uint16_t div(uint16_t x, uint16_t y)
{
return (x / y);
}
Run Code Online (Sandbox Code Playgroud)
在库项目中,在"目标选项1'目标1"下,我选择了"创建库".然后我编译了库项目.
成功编译后,我回到lib_test项目并右键单击"Target1"并选择"添加组".我创建了一个名为"Library"的组,并将之前编译的"library.lib"从"library"目录添加到"Library"组.
最后,在目标1的选项(在lib_test项目中)下,我转到"C/C++"选项卡并将"库"添加到"包含路径".然后我能够成功编译lib_test项目(有一些关于变量被设置但从未使用的警告).在"工具 - >设置PC-Lint"下,我添加了以下内容:
PC-Lint包含文件夹:C:\ Keil_ARM\RV31\INC \和library \
Lint可执行文件:C:\ Lint\LINT-NT.EXE
配置文件:C:\ Lint\lnt\CO-RV.LNT
我修改了CO-RV.LNT文件以通过修改-wlib()来验证我的Lint结果.当我用-wlib(0)运行Lint时,我没有收到有关我的库文件的警告或错误.然后我改变了-wlib(2)并收到了很多关于stdint.h的警告.
这绝对是过于简单化,但它应该给你一个很好的起点.另外,我收到了关于我的变量没有在"main.c"中访问的Lint警告,但我希望如此.