【问题标题】:Non-standard function return types: Fixing Splint parse error非标准函数返回类型:修复 Splint 解析错误
【发布时间】:2014-02-24 11:52:54
【问题描述】:

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

bit foo(){
    //...
}

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

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

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

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

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

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

进展:

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

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

还有

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

【问题讨论】:

    标签: c ansi splint xc8


    【解决方案1】:

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

    有类似的东西:

    #if defined RUNNING_SPLINT
    #define bit unsigned char
    #endif
    

    在例如确保在任何地方都包含一个标头,enter code here 并确保在 Splint 看到代码时定义预处理器符号 RUNNING_SPLINT。它有一个 -D 标志。

    【讨论】:

      【解决方案2】:

      在常见问题解答中:

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

      引用它:

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

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        • 2021-10-25
        • 2021-10-16
        • 1970-01-01
        相关资源
        最近更新 更多