C语言查缺补漏(十)#ifndef与#endif

忽略点十:#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!

转载请注明出处!!!

​ 如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢!

猜你喜欢

转载自blog.csdn.net/Ivan_zcy/article/details/82937610