在仿真时,通过watch观察变量,发现某个变量在初始化使用宏定义赋值后,与在运行中使用宏定义赋值结果不一样。
理论分析,宏定义是在预编译时处理的,在使用过程中应该都一样。但却出现不一样的结果,经以下分析:
宏定义中嵌套使用多个宏定义,包含一些判断性宏定义。预想是在编译流程中,初始化使用该宏定义时,由于该判断性宏定义在另一个文件中,可能还没有被包含;而在运行中使用该宏定义时,该判断性宏定义已经被包含和定义,因此出现两个完全不同的数据。
选中listing下C preprocessor Listing...选项。打开调用该宏定义的文件对应生成的编译过程文件。
可以发现,使用的数值是判断性宏定义不存在时的数值。由此推论出,在生成该编译流程文件时,被包含的部分宏定义没有完全定义。
解决方法:
1、修改判断性宏定义位置,梳理正确的编译过程。
2、修改编译流程。这个比较难,我没找到方法,但理论上可行。