#ifndef/#define/#endif使用(转载)

摘要:
想必很多人都看过“头文件中的#ifndef/#define/#endif防止该头文件被重复引用”。其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。下面给一个#ifndef/#define/#endif的格式:#ifndefA_H意思是"ifnotdefinea.h"如果不存在a.h接着的语句应该#defineA_H就引入a.h最后一句应该写#endif否则不需要引入1#ifndefGRAPHICS_H//防止graphics.h被重复引用2#defineGRAPHICS_H34#include//引用标准库的头文件5…

想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?

其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include "a.h" 和#include "c.h"此时就会造成c.h重复引用。

头文件被重复引用引起的后果:

有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率低下那将是一件多么痛苦的事情。
有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。

是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?

答案:不是一定要加,但是不管怎样,用ifnde xxx #define xxx#endif或者其他方式避免头文件重复包含,只有好处没有坏处。个人觉得培养一个好的编程习惯是学习编程的一个重要分支。

下面给一个#ifndef/#define/#endif的格式:
#ifndef A_H意思是"if not define a.h" 如果不存在a.h
接着的语句应该#define A_H 就引入a.h
最后一句应该写#endif 否则不需要引入

1 #ifndef GRAPHICS_H //防止graphics.h被重复引用 
2 #define GRAPHICS_H 
3 
4 #include <math.h> //引用标准库的头文件 
5 6 #include “header.h” //引用非标准库的头文件 
7 8 void Function1(…); //全局函数声明 
9 10 class Box //类结构声明 
11 { 
12 13 }; 
14 #endif

转:http://blog.csdn.net/abc5382334/article/details/18052757

免责声明:文章转载自《#ifndef/#define/#endif使用(转载)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇web_reg_save_param_ex简介Lua学习笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

ThinkPHP

ThinkPHP的开发模式是define//Debug mode define//当运行模式控制器的操作系统找不到请求的方法时,它将定位__Empty()方法处理。使用此机制,我们可以统一处理用户请求的所有不存在的操作。模块分组大A函数和大R函数有什么区别?关联数组易于操作,信息量相对较大...

更换Mariadb库为mysql 5.7

MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。比如要安装5.6版本,将5.7源的enabled=1改成enabled=0,然后再将5.6源的enabled=0改成enabled=1即可。查看当前的启用的MySQL版本:yumrepolistenabled|grepmysql3、安装MySQLyuminstal...

浪潮各机型管理芯片BMC IP(智能平台管理接口)设置

NF5240m3/NF5140m3/NF5280m3/SA5212H2/NP5540M3NF5270M3/NF5170M3/NF8420m3IPMI主板集成管理芯片BMCIP设置开机按DEL键进入BIOS设置选择"ServerMgmt"---"BMCNetworkConfiguration"---"lanchannel1/2"---"staticipaddr...

kernel: blk_update_request: I/O error, dev fd0, sector 0

检查后,控制台无法登录。重新启动虚拟机,报告下图,然后执行journalctl以显示以下系统消息日志原因搜索。。。...

element-ui表格el-table回显时默认全选数据

1、html代码˂el-table-columntype="selection"width="45"...

android获取Mac地址和IP地址

在实际项目中测试了以下方法以获取Mac地址:(1)设备打开Wifi连接并获取网卡的Mac地址(但不打开Wifi,无法获取Mac地址。此方法也是网络上最常用的方法)//本地MacpublicstaticStringgetLocalMacAddressFromWifiInfo(Contextcontext){WifiManagerwifi=(WifiManage...