1

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

bit foo(){
    //...
}

但作为非标准 C,Splint 静态分析器会给出以下错误:

解析错误:非函数声明:位:“--------------------------”诠释。

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

我该如何解决这个问题,以便 Splint 可以分析其余文件?我认为可能有两种方法:

  1. 我想我记得看到一个可以通过 CLI 传递给 Splint 的标志,它告诉它将给定的非标准类型替换为标准类型(例如位到无符号字符),但我现在似乎根本找不到它!

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

进步:

我在论坛上找到了以下内容,但在手册中找不到有关如何使用 -D 标志的信息

要忽略关键字,请添加 -Dnonstandardkeyword= 以使预处理器将其消除

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

4

2 回答 2

2

如果分析程序没有选项进行替换,您当然可以使用预处理器进行替换。

有类似的东西:

#if defined RUNNING_SPLINT
#define bit unsigned char
#endif

例如,您确保包含在任何地方的标头,并确保在 Splint 看到代码时enter code here定义预处理器符号。RUNNING_SPLINT-D为此设置了一个标志。

于 2014-02-24T11:57:31.250 回答
0

它在常见问题解答中:

http://www.splint.org/faq.html

引用它:

16.我使用非标准关键字和数据类型的编译器在嵌入式系统上开发代码。我想在我的代码上运行 Splint,但这些非标准关键字会导致解析错误。我应该怎么办?

你可以经常使用 -D 来解决这个问题。

如果只想忽略某个关键字,可以添加 -Dnonstandardkeyword= 使预处理器消除关键字,其中 nonstandardkeyword 是关键字的名称。同样,您可以使用 -Dspecialtype=int 将自定义类型解析为 int。

于 2014-02-24T12:21:28.403 回答