C++笔记 #ifndef 、#endif 和 #define

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ChaoLi_Chen/article/details/102637253

在学习C++的时候经常看到  头文件中会有 如下代码,此处的代码是防止 ifndef和endif之间的代码被重复的机械性引入,其中

#ifndef 和 #endif 是首位对应,#ifndef 是对#define  定义宏的判断。如果第一次没有定义则 #define 将会 直接对宏进行定义。

#ifndef _CLT_SOCKET_H_

#define _CLT_SOCKET_H_

...........


#endif 

例如 clitsocket.h 内容如下

#ifndef _CLT_SOCKET_H_

#define _CLT_SOCKET_H_

//客户端初始化报文
int cltSocket_init(void **handle); 

//客户端发送的报文
int cltSocekt_senddata(void *handle,unsigned char *buf,int buflen);

//客户端收报文
int cltSocekt_resvdata(void *handle ,unsigned char *buf,int * buflen);

//客户端销毁环境
int cltSocekt_destory(void *handle);

#endif 

有一个c文件如下

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#include "clitsocket.h"//第一次引入clitsocket.h

#include "clitsocket.h" //第二次引入clitsocket.h

#include "clitsocket.h" //第三次引入clitsocket.h

#include "clitsocket.h" //第四次引入clitsocket.h

#include "clitsocket.h" //第五次引入clitsocket.h

//客户端初始化报文
int cltSocket_init(void **handle) 
{
	return 0;
}

//客户端发送的报文
int cltSocekt_senddata(void *handle, unsigned char *buf, int buflen)
{
	return 0;
}

//客户端收报文
int cltSocekt_resvdata(void *handle, unsigned char *buf, int * buflen)
{
	return 0;
}

//客户端销毁环境
int cltSocekt_destory(void *handle)
{
	return 0;
}

我们看到 第二个文件引入了 string.h 五次,如果我们没在头文件中使用 宏定义,那么clitsocket.h 内容将会被机械性的引入五次。而在头文件增加  #ifndef _CLT_SOCKET_H_     #define _CLT_SOCKET_H_  #endif   中增加定义,仅仅会出现一次引入,不会造成重复拷贝操作。

猜你喜欢

转载自blog.csdn.net/ChaoLi_Chen/article/details/102637253
今日推荐