gpt4 book ai didi

mplab - 使用夹板在windows上用MPLAB进行静态代码分析如何避免系统文件解析错误

转载 作者:行者123 更新时间:2023-12-05 07:50:10 28 4
gpt4 key购买 nike

我在 Windows(XC32 v1.40 编译器)上使用带有 PIC32 的 MPLAB X (3.26)。作为审查的一部分,我正在尝试使用夹板对某人的代码进行静态代码分析。我已经对大部分编译器定义和搜索路径进行了排序,但在避免 PIC32 std 包含文件中的解析错误方面有点难过。

我用来运行夹板的命令是

splint ^
-D"__32MX370F512L__" ^
-D"__PIC32_FEATURE_SET__"=370 ^
-D"__LANGUAGE_C__" ^
+I"C:/Program Files (x86)/Microchip/xc32/v1.40/pic32mx/include/" ^
main.c

然后输出给出

< Location unknown >: Field name reused:
Code cannot be parsed. For help on parse errors, see splint -help
parseerrors. (Use -syntax to inhibit warning)
< Location unknown >: Previous use of
< Location unknown >: Previous use of

.... approx 100 times then...

C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stddef.h(4,18):
Datatype ptrdiff_t declared with inconsistent type: long int
A function, variable or constant is redefined with a different type. (Use
-incondefs to inhibit warning)
load file standard.lcd: Specification of ptrdiff_t: arbitrary integral type
C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stddef.h(5,27):
Datatype size_t declared with inconsistent type: unsigned long int
load file standard.lcd: Specification of size_t:
arbitrary unsigned integral type
C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stddef.h(6,13):
Datatype wchar_t declared with inconsistent type: int
load file standard.lcd: Specification of wchar_t: arbitrary integral type
C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stdarg.h(75,36):
No type before declaration name (implicit int type): __builtin_va_list :
int
A variable declaration has no explicit type. The type is implicitly int.
(Use -imptype to inhibit warning)
C:\Program Files (x86)\Microchip\xc32\v1.40\pic32mx\include\\stdarg.h(75,36):
Parse Error: Suspect missing struct or union keyword: __builtin_va_list :
int. (For help on parse errors, see splint -help parseerrors.)
*** Cannot continue.

最后一个导致事情停止。我试过 -skip-iso-headers 之类的东西,但没有成功。它的 standard.lcd 文件和 xc32 std 文件似乎存在问题

谁能告诉我

  • 什么 < Location unknown >: Field name reused:意味着或可能指的是什么?
  • 解决由于 std 头文件导致的解析错误的方法?

到目前为止,解决头文件问题的唯一方法是定义类型,例如

-D"__builtin_va_list"=int ^

最佳答案

我认为您的代码(或您#include 的某些代码)正在使用匿名位域或/和结构。匿名结构和匿名联合由 GNU extension 提供对于早于 C11 的 C 版本。由于 Splint 不知道 C11(我只在 manualgoogle agrees 中发现了 C99 的提及)和 only partial support for the GNU extensions (搜索 gnu-extensions),很难解析它们。

我在为 PIC18f46k22 编写的一些代码中遇到了类似的问题,尽管我使用的是 sdcc 而不是 XC8。

问题出在 pic18f46k22.h 上,它在 typedef 联合中有匿名结构(特别是位域)。

这段代码...

typedef union
{
struct
{
unsigned name0 : 1;
unsigned name1 : 1;
unsigned name2 : 1;
unsigned name3 : 1;
unsigned name4 : 1;
unsigned : 1;
unsigned : 1;
unsigned : 1;
};

struct
{
unsigned name : 6;
unsigned : 2;
};
} __NAMEbits_t;

...会产生这些错误...

< Location unknown >: Field name reused:
Code cannot be parsed. For help on parse errors, see splint -help
parseerrors. (Use -syntax to inhibit warning)
< Location unknown >: Previous use of

...但是这段代码不会。

  struct indv
{
unsigned name0 : 1;
unsigned name1 : 1;
unsigned name2 : 1;
unsigned name3 : 1;
unsigned name4 : 1;
unsigned : 1;
unsigned : 1;
unsigned : 1;
};
struct all
{
unsigned name : 6;
unsigned : 2;
};

typedef union
{
struct indv individualbits;
struct all allbits;
} __NAMEbits_t;

关于mplab - 使用夹板在windows上用MPLAB进行静态代码分析如何避免系统文件解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36465544/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com