C语言中有三种预处理方式:宏定义,文件包含,条件编译。
本次项目文件为机智云对应的串口配置函数,希望实现通过宏定义的修改,而自动识别与之连接的串口,实现串口初始化相关代码,所以借此机会了解了一下条件编译是怎么回事。在很多的开源代码中,例如FATFS,各类RTOS中看到非常多的条件编译内容#if、#elif、#endif等等,这一方式利于程序的移植,调试等。
条件编译常用形式一:
#if 表达式1
程序块1
#elif 表达式2
程序块2
......
#else
程序块n
#endif
其中的表达式和程序块与C的语法一致,下面是部分代码
//根据定义的GIZ_UART自动定义连接wifi模块的串口号
#if GIZ_UART == 1
#define GIZ_UART_PORT USART1
#define GIZ_UART_NVIC USART1_IRQn
#define GIZ_UART_PORT_RCC RCC_APB2Periph_USART1
#warning 当前使用串口1与wifi模块通讯!
#elif GIZ_UART == 2
#define GIZ_UART_PORT USART2
#define GIZ_UART_NVIC USART2_IRQn
#define GIZ_UART_PORT_RCC RCC_APB1Periph_USART2
#elif GIZ_UART == 3
#define GIZ_UART_PORT USART3
#define GIZ_UART_NVIC USART3_IRQn
#define GIZ_UART_PORT_RCC RCC_APB1Periph_USART3
#elif defined(STM32F10X_HD)||defined(