看正点原子的stm32串口初始化程序,usart.h文件里如下:
[cpp]view plaincopy
- #ifndef__USART_H
- #define__USART_H
- #include
- #include”stdio.h”
- externu8USART_RX_BUF[64];//接纳缓冲,最大63个字节.末字节为换行符
- externu8USART_RX_STA;//接纳状况符号
- //假如想串口中止接纳,请不要注释以下宏界说
- //#defineEN_USART1_RX//使能串口1接纳
- voiduart_init(u32pclk2,u32bound);
- #endif
这段程序里#define EN_USART1_RX被注释掉了。
usart.c里有一段串口中止呼应子函数程序如下:
[cpp]view plaincopy
- #ifdefEN_USART1_RX//假如使能了接纳
- u8USART_RX_BUF[64];//接纳缓冲,最大64个字节.
- u8USART_RX_STA=0;//接纳状况符号
- voidUSART1_IRQHandler(void)
- {
- ……
- }
- #endif
手册给出的解说是,这儿用了宏界说#ifdef,当需求运用串口接纳的时分,只需在usart.h里边界说EN_USART1_RX就能够了。不运用的时分注释掉就可,这样能够省出部分sram和flash。
下转一篇文章:http://blog.163.com/solylee@126/blog/static/171823157201011914824753/
C中#if 0 和#if 1
当注释掉大块代码时,运用”#if 0″比运用”/**/”要好,由于用”/**/”做大段的注释要避免被注释掉的代码中有嵌套的”/**/”,这会导致注释掉的代码区域不是你想要的规模, 当被注释掉的代码很大时简单呈现这种状况,特别是过一段时间后又修正该处代码时更是如此。
在这儿趁便对条件编译(#ifdef, #else, #endif, #if等)进行阐明。以下分3种状况: 1. 状况1: #ifdef _XXXX ...程序段1... #else ...程序段2... #endif 这表明假如标识符_XXXX已被#define指令界说过则对程序段1进行编译;不然对程序段2进行编译。 例: #define NUM ............. ............. ............. #ifdef NUM printf("之前NUM有过界说啦!:) "); #else printf("之前NUM没有过界说!:( "); #endif } 假如程序最初有#define NUM这行,即NUM有界说,碰到下面#ifdef NUM的时分,当然履行第一个printf。不然第二个printf将被履行。 我以为,用这种,能够很便利的敞开/封闭整个程序的某项特定功用。 2:状况2: #ifndef _XXXX ...程序段1... #else ...程序段2... #endif 这儿运用了#ifndef,表明的是if not def。当然是和#ifdef相反的状况(假如没有界说了标识符_XXXX,那么履行程序段1,不然履行程序段2)。比如就不举了。 3:状况3: #if 常量 ...程序段1... #else ...程序段2... #endif 这儿表明,假如常量为真(非0,随意什么数字,只需不是0),就履行程序段1,不然履行程序段2。假如有#if需求顶格写