假如要开发一款产品,开始的程序一般会利用前面已开发完毕的程序,但是程序的时钟可能不是我们需要的,时钟的变化会导致串口波特率的产生偏差,这时候我们可以利用宏来选择
/************系统时钟频率定义,主要用于配置UART波特率**********/
#if (SYSCLK_SRC == IRCH)
#define FOSC (3686400)
#elif (SYSCLK_SRC == PLL)
#define PLL_Multiple 6 //PLL倍频倍数
#define FOSC (3686400*PLL_Multiple)
#else
#define FOSC (3686400)
#endif
#if、#elif、#else 和 #endif #ifndef都是预处理命令,整段代码的意思是:如果宏 SYSCLK_SRC 与IRCH相同,就保留第3 行代码,删除第 5、6、8 行代码;如果宏 SYSCLK_SRC 与 PLL相同,就保留第 5 、6 行代码;如果所有的宏都为假,就保留第 8 行代码。
这些操作都是在预处理阶段完成的,多余的代码以及所有的宏都不会参与编译,不仅保证了代码的正确性,还减小了编译后文件的体积。
这种能够根据不同情况编译不同代码、产生不同目标文件的机制,称为条件编译。条件编译是预处理程序的功能,不是编译器的功能。
#if 的用法
#if/后面接的是表达式, 这个表达式的结果必须为一个数值(任意数值皆可,但不能为空)
#if 的一般格式:
#if 整型常量表达式1