标签:包含 C++ 编译 test cpp endif ifndef include
【C/C++】ifndef/define/endif的作用
参考资料来源于网上,还未经本人实验证明。
主要作用
防止头文件被重复包含和编译。
解释:#ifndef
起到的效果是防止一个源文件两次包含同一个头文件。那么一个源文件为什么会两次包含同一个头文件呢?
情况1:你写的test.cpp
里包含了a.h
和b.h
,a.h
里包含了b.h
,所以b.h
就会被包含和编译两次。
/*name: test.cpp*/
#include <a.h>
#include <b.h>
······
/*name: a.h*/
#include <b.h>
······
情况2:你写的test.cpp
里包含了a.h
和b.h
,a.h
里包含了b.h
,b.h
里包含了a.h
,所以a.h
,b.h
就会循环包含和编译。
/*name: test.cpp*/
#include <a.h>
#include <b.h>
······
/*name: a.h*/
#include <b.h>
······
/*name: b.h*/
#include <a.h>
······
隐藏危险
1、重复定义:在情况1里,如果b.h
中定义了一个变量,在编译test.cpp
时就会报重复定义的错误。解决办法:不要在头文件中定义变量。
2、无限循环编译:情况2编译器会报Error #include nested too deeply
的错误。解决办法:把b.h
改写成:
#ifndef _A_H_
#define _A_H_
#include <a.h>
#endif
······
这样子编译test.cpp
,当编译到b.h
时,编译器能进行判断之前有没有编译过#include<a.h>
,如果已经编译过了,则不再重复编译。
解决办法
所有头文件前后都加上ifndef/define/endif。
reference
1、主要目的:https://zhidao.baidu.com/question/22559696.html 如下图所示。
2、隐藏危险-重复定义:https://www.jb51.net/article/100939.htm
3、隐藏危险-无限循环编译:https://blog.csdn.net/weixin_41656968/article/details/80493923
标签:包含,C++,编译,test,cpp,endif,ifndef,include 来源: https://blog.csdn.net/baidu_27690801/article/details/95016120
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。