首页 > 技术文章 > 预编译多.c文件工程应用

Brimon-zZY 2020-11-23 19:38 原文

 条件指示符#ifndef的最主要目的是防止头文件的重复包含和编译。

#ifndef X  //先测试是否被宏定义过

#define X 

程序段1//如果X没有被宏定义过,定义X,并编译程序段1;

#else

程序段2 //如果X已经定义过了则编译程序段2 的语句,忽视程序段1.

#endif

 

ifndef和endif要一起使用,不能存在丢失。

 当第一次包含test.h时,由于没有定义_TEST_H,条件为真,这样就会包含(执行)#ifndef _TEST_H和

#endif之间的代码,当第二次包含test.h时前面一次已经定义了_TEST_H,条件为假,#ifndef _TEST_H和

#endif之间的代码也就不会再次被包含,这样就避免了重定义了.

 

#define            定义一个预处理宏
#undef            取消宏的定义

#if                   编译预处理中的条件命令,相当于C语法中的if语句
#ifdef              判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef            与#ifdef相反,判断某个宏是否未被定义
#elif                若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
#else              与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
#endif             #if, #ifdef, #ifndef这些条件命令的结束标志.
defined          与#if, #elif配合使用,判断某个宏是否被定义

 

例如:

自适应5微妙延时:

void delay5us()
{
  #if MAIN_fosc == 11059200
          _nop_();
  #elif MAIN_fosc == 12000000
      _nop_();
 #elif  MAIN_fosc == 22118400
      _nop_();_nop_();_nop_();
 #endif
}

 

推荐阅读