- MC680X0和I80X86 Polyspace提供的代码中定义。你可能缺少一些编译器头文件路径Polyspace项目。
- CPU_FAMILY是# define-d MC680X0 Polyspace提供的代码。
Polyspace错误发现者忽略#如果检查宏的值。
10视图(30天)
显示旧的评论
我运行一个Polyspace Bug仪分析一些CPP代码,用下面的宏定义(通过配置- >宏):
CPU_FAMILY = I80X86
从图书馆我使用头文件有以下:
#如果CPU_FAMILY = = MC680X0
#包括<拱/ mc68k / excMc68kLib.h >
#endif / * CPU_FAMILY = = MC680X0 * /
分析的时候,我得到了警告:
警告:找不到包含文件“拱/ Mc68kLIb.h”
它是正确的,我没有这个头文件,但不应该被解析,由于#如果。
请谁能告诉我我做错了什么吗?
谢谢。
马丁
0评论
接受的答案
Anirban
2021年11月24日
编辑:Anirban
2021年11月24日
有两个事情:
我在下面详细解释情况。
案例1:MC680X0 I80X86并不是定义
让我给你举个例子。如果你确认这个代码:
#如果CPU_FAMILY = = MC680X0
#包括<拱/ mc68k / excMc68kLib.h >
#endif
无效main () {
intj = 1;
intj k =;
}
用宏定义CPU_FAMILY = I80X86,您将看到替换发生的结果,也就是说,您将看到类似:
如果I80X86 = = MC680X0 #。
但是,
# include
不是预处理。这是因为代码验证没有的知识
I80X86和MC680X0
是这样的。
#如果
本质上是整数的比较,所以除非吗
I80X86和MC680X0
定义、代码验证将无法做比较。你可以检查这通过更改代码来定义这两个宏。像下图:
#定义MC680X01
#定义I80X862
#如果CPU_FAMILY = = MC680X0
#包括<拱/ mc68k / excMc68kLib.h >
#endif
无效main () {
intj = 1;
intj k =;
}
你会发现#如果比较现在和工作
# include
预处理。
某个地方,在你的编译器头,宏
I80X86和MC680X0
必须定义(#如果s将如何工作)。不知何故,在你设置Polyspace项目中,这些编译器头没有得到提供。因此,对于Polyspace,
I80X86和MC680X0
是两个不透明的东西。
案例2:CPU_FAMILY在头文件中定义
如果CPU_FAMILY MC680X0头文件中定义,它会覆盖你的宏定义的配置。要检查这一点,您可以验证这段代码通过设置CPU_FAMILY = I80X86:
#定义MC680X01
#定义I80X862
#定义CPU_FAMILYMC680X0
#如果CPU_FAMILY = = MC680X0
#包括<拱/ mc68k / excMc68kLib.h >
#endif
无效main () {
intj = 1;
intj k =;
}
您将看到宏
CPU_FAMILY
需要在代码中定义的值,而不是在配置。