我正在使用嵌入式系统XC8 C编译器(用于PIC微处理器)。允许以下内容:
bit foo(){
//...
}
但是非标准C,Splint静态分析器会出现以下错误:
解析错误:非函数声明:位: “--------------------------------------” 中间体
错误的文件/行是相应的.h文件中的函数原型。
如何解决此问题,以便Splint可以分析文件的其余部分?我想可能有两种方式:
我想我记得看到一个可以通过CLI传递给Splint的标志,告诉它将给定的非标准类型替换为标准类型(例如bit to unsigned char)但我似乎无法现在就找到它!
另外,也许还有另一种方法来编写满足ANSI-C要求的c代码,同时还允许XC8将返回类型解释为bit
?
的进度: 的
我在论坛上发现了以下内容,但我无法找到有关如何在manual 中使用-D标志的信息:
要忽略关键字,请添加-Dnonstandardkeyword =来制作 预处理器消除它
并且
使用-Dspecialtype = int将自定义类型解析为int。
答案 0 :(得分:2)
如果分析程序没有选择进行替换,您当然可以使用预处理器来完成。
有类似的东西:
#if defined RUNNING_SPLINT
#define bit unsigned char
#endif
例如您确定的标头包含在任何地方enter code here
,并确保在Splint看到代码时定义预处理器符号RUNNING_SPLINT
。它有一个-D
标志。
答案 1 :(得分:0)
在FAQ中:
http://www.splint.org/faq.html
引用它:
16.I使用非标准关键字和数据类型的编译器在嵌入式系统上开发代码。我想在我的上面运行Splint 代码但这些非标准关键字会导致解析错误。我应该怎么 办?
您经常可以使用-D来解决此问题。
如果您只想忽略关键字,可以添加 -Dnonstandardkeyword =使预处理器消除关键字,其中nonstandardkeyword是关键字的名称。同样,你 可以使用-Dspecialtype = int将自定义类型解析为int。