c语言中头文件中的宏定义

2017-12-03 13:25:25来源:cnblogs.com作者:太阳上乘凉人点击

分享

看见头文件中的条件编译就犯怵,不知什么意思,但是,师傅说:”就得那么写“,我照做,但是知其然而不知其所以然。

好吧,我承认自己只是一个代码的搬运工,哦,不,或许还谈不上。

下面是学习后自己的理解~~~

代码:

 1 #ifndef DSP_ADC_BSP_H_    //防止头文件被重复包含 2 #define DSP_ADC_BSP_H_ 3  4 #ifdef _DSP_ADC_BSP_C_   //判断是否被定义了 5 #define ADCBSPEXT         //定义时执行 6 #else 7 #define ADCBSPEXT extern //未定义时执行 8 #endif //_DSP_ADC_BSP_C_ 9 10 ADCBSPEXT void InitileAdc(void);11 ADCBSPEXT void CaptureAdcInt();12 ADCBSPEXT unsigned char CaptureAdcInt_data();13 14 #endif /* DSP_ADC_BSP_H_ */

也许我渣把,总之,之前我确实不会。

解释:

第1、2行和第14行:防止重复定义。

#ifndef DSP_ADC_BSP_H_  //如果DSP_ADC_BSP_H_没有被定义,则执行以下
#define DSP_ADC_BSP_H_ //定义DSP_ADC_BSP_H_
...
#endif /* DSP_ADC_BSP_H_ */ //注解是给程序员指明对应的#ifndef指令。

在首次包含这个文件时,没有定义宏DSP_ADC_BSP_H_,预处理器允许保留#ifndef和#endif之间的多行内容。

如果再次包含此文件,预处理器将把#ifndef和#endif之间的内容删除。

意思是如果两个.c文件同时包含了该.h文件,只会定义一次。

第3~12行:提供只在.h文件中只定义一次就可以在别的模块中使用外部函数与变量的方法。

首先说明extern:

extern int i;

该声明编译器提供的信息是,i 是int型变量 但是编译器不会为i分配存储单元。上述声明不是变量的定义,而是提示编译器需要访问定义在别处的变量。

变量在程序中可以多次声明,但只能有一次定义。

#ifdef _DSP_ADC_BSP_C_   //判断_DSP_ADC_BSP_C_是否被定义
#define ADCBSPEXT //如果定义了执行
#else
#define ADCBSPEXT extern //如果没有定义执行
#endif

ADCBSPEXT void InitileAdc(void);
ADCBSPEXT void CaptureAdcInt();
ADCBSPEXT unsigned char CaptureAdcInt_data();

在与之对应模块的.c文件中会有这么一句话:

#define _DSP_ADC_BSP_C_ //定义了_DSP_ADC_BSP_C_ 

那么当为本模块.c文件时,ADCBSPEXT替换为空白。

函数声明就是:

void InitileAdc(void);void CaptureAdcInt();unsigned char CaptureAdcInt_data();

当为其他.c文件用到这些函数式,ADCBSPEXT替换为extern以提供使用。

extern void InitileAdc(void);extren void CaptureAdcInt();extern unsigned char CaptureAdcInt_data();

  

菜鸟一枚,仅供参考,多多指教。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台