非标准函数返回类型:修复Splint解析错误

时间:2014-02-24 11:52:55

标签: c ansi splint xc8

我正在使用嵌入式系统XC8 C编译器(用于PIC微处理器)。允许以下内容:

bit foo(){
    //...
}

但是非标准C,Splint静态分析器会出现以下错误:

  

解析错误:非函数声明:位:   “--------------------------------------”                  中间体

错误的文件/行是相应的.h文件中的函数原型。

如何解决此问题,以便Splint可以分析文件的其余部分?我想可能有两种方式:

  1. 我想我记得看到一个可以通过CLI传递给Splint的标志,告诉它将给定的非标准类型替换为标准类型(例如bit to unsigned char)但我似乎无法现在就找到它!

  2. 另外,也许还有另一种方法来编写满足ANSI-C要求的c代码,同时还允许XC8将返回类型解释为bit

  3. 进度:

    我在论坛上发现了以下内容,但我无法找到有关如何在manual 中使用-D标志的信息:

      

    要忽略关键字,请添加-Dnonstandardkeyword =来制作   预处理器消除它

    并且

      

    使用-Dspecialtype = int将自定义类型解析为int。

2 个答案:

答案 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。