C语言编程中的预处理命令你会用吗?( 二 )

格式2
#if XXX/*****程序段1*****/#else/*****程序段2*****/#endif格式3
#ifndef XXX0 //#if (XXX==1)/*****程序段1*****/#elif (XXX==2)/*****程序段2*****/#else/*****程序段3*****/#endif在以上的格式基础上如果再加上#define宏定义就更好地去控制了 。比如下面的这个例子:
在一个嵌入式的小系统中有两种调试方式,一种是串口调试,一种是USB转串口调试 。串口调试一般使用在系统程序开发阶段调试 。而USB转串口调试一般使用在系统开发完成后的功能调试,因为USB还可以实现文件系统的挂载,在后期使用USB进行固件升级是非常方便的 。现在的问题就是用什么方法可以更简单地实现串口调试与USB转串口调试的快速转换 。
其中的方法之一就是使用条件预处理命令实现切换,
有四个函数:
USB_Init();Usb_printf(char *p); //向usb转串口打印调试信息Usart_Init();Usart_printf(char *p); //向串口打印调试信息实例过程如下:
#define PRMOS 0 //0 使用串口打印 1 使用usb打印信息#if PRMOS#define DEBUG(s) Usb_printf(s)#else#define DEBUG(s) Usart_printf(s)#endifint main(void){#if PRMOSUSB_Init();#elseUsart_Init();#endifWhile(1){DEBUG("Hello, World! n");Delay_ms(1000);}}大致的思路就是使用#define定义一个常量和使用同一个标识符分别定义串口打印函数和usb打印函数,然后使用条件判断预处理#if通过判断PRMOS标识符选择编译哪一部分,在程序设计的时候也需要使用#if把USB和串口相关的代码区分开 。这样在编译的时候始终都是编译一部分,所以整体的编译速度或者占用空间都是比较少的 。在功能切换时只需要更改PRMOS的值就完成了全部代码的修改,这样是不是很方便 。
这种程序设计方法在一些实时操作系统的配置中使用的比较多,例如FreeRTOS中的功能配置

C语言编程中的预处理命令你会用吗?

文章插图
 

C语言编程中的预处理命令你会用吗?

文章插图
 
总结 。预处理命令主要是使用在程序的优化上 。可以使程序设计更灵活更好看等等 。

【C语言编程中的预处理命令你会用吗?】


推荐阅读