||
关于Keil预处理中#define语句和#include语句的顺序问题
今天在学习TI的stellaris luminary LM3S9B96的固件移植过程中,发现了一个问题,叙述如下:
由于固件中的pin_map.h文件中包含了LM3S所有芯片型号的引脚映射,所以当为某一特定的芯片进行引脚映射时,要通过#define PART_LM3Sxxxx 语句选择特定的宏定义段。Pin_map.h中关于LM3S9B96的宏定义段如下图所示:
但编译却并没有通过,而是出现了如下图所示的提示:
可见,图片二中的宏定义段并没有加载到.C的文件中,但当把#define PART_LM3S9B96语句调整到所有#include 语句之前时,如下图所示:
再次进行编译链接,则成功了
综上所述,自然而然地产生如下的疑问:Keil在进行预处理时,是把#define语句和#include语句分类地分开进行编译的吗?即在一个文件中当#include语句为第一条语句时,则编译器先把此文件中所有的#include语句处理完,才转而处理#define语句。不知小弟分析的对不对,还请熟悉预处理过程的大神给予指点!!!