您的位置 首页 电源

条件编译的用法

看正点原子的stm32串口初始化程序,usarth文件里如下:[cpp]viewplaincopyifndef__USART_Hdefine__USART_Hincludestm32f10x

看正点原子的stm32串口初始化程序,usart.h文件里如下:

[cpp]view plaincopy

  1. #ifndef__USART_H
  2. #define__USART_H
  3. #include
  4. #include”stdio.h”
  5. externu8USART_RX_BUF[64];//接纳缓冲,最大63个字节.末字节为换行符
  6. externu8USART_RX_STA;//接纳状况符号
  7. //假如想串口中止接纳,请不要注释以下宏界说
  8. //#defineEN_USART1_RX//使能串口1接纳
  9. voiduart_init(u32pclk2,u32bound);
  10. #endif

这段程序里#define EN_USART1_RX被注释掉了。

usart.c里有一段串口中止呼应子函数程序如下:

[cpp]view plaincopy

  1. #ifdefEN_USART1_RX//假如使能了接纳
  2. u8USART_RX_BUF[64];//接纳缓冲,最大64个字节.
  3. u8USART_RX_STA=0;//接纳状况符号
  4. voidUSART1_IRQHandler(void)
  5. {
  6. ……
  7. }
  8. #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需求顶格写

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/261428.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部