忽略点十:#ifndef与#endif
印象中两者在C/C++项目创建头文件时自动添加,一直没有深究它的意义,决定跟大家讲一下它的用法,顺便也是对自己的查缺补漏
要将他们,首先要说一下项目,对于C语言项目来说,多文件中的每个文件的特殊全局变量,类型定义,函数可能需要在多个文件中被使用,这时可将这些全局变量,类型定义,函数声明单独写成一个头文件
这些头文件一般采用 源文件名.h 命名,在需要用到该头文件的文件中采用#include “源文件名.h” 引用(注意不是尖括号<>,而是""),不仅源文件可以引用头文件,头文件也可以引用头文件。
这时候,会出现一种情况:源文件1.c中引用2.h和3.h头文件,而2.h头文件中也引用了3.h头文件。 这时3.h头文件被引用了两次,有可能会造成函数,变量的重复声明!!!
为了避免这一种情况的出现,我们可以在3.h中定义一个宏:
#define 宏名
只要这个宏定义过,就跳过整个3.h的整个内容
如何实现这一点呢?
对,就是利用#ifndef 宏名和#endif,格式如下:
#ifndef 宏名 //判断是否声明过该宏名,如果声明过,直接跳到#endif
#define 宏名 //如果没有声明过,声明该宏名
//.h文件内容
#endif
这样又会造成一个问题,若2.h的验证宏名为p(即#ifndef后声明的宏名),3.h的验证宏名也为p,那么先引用2.h,后引用3.h,会造成3.h引用不上。也就是说,必须得保证每个头文件的#ifndef后的宏名都不一样!!!
因此,此类宏名有一个固定格式,即:工程名 _ 路径名_ 文件名_ H_
这样就能避免重名的风险
以上就是#ifndef和#endif的全部,Over!
如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢!