版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
在学习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 中增加定义,仅仅会出现一次引入,不会造成重复拷贝操作。