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

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

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

(1)有些头文件重复引用,只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率就是很重要的了。

(2)有些头文件重复包含,会引起编译错误,比如在头文件中定义了全局变量或写了函数的实现而不是声明(虽然这种方式不被推荐,但确实是C规范允许的),这种会引起重复定义。

3、 是不是所有的头文件中都要加入这些代码?

不是一定要加,但是不管怎样,用#ifndef/#define/#endif或者其他方式避免头文件重复包含,只有好处没有坏处。培养一个好的编程习惯是学习编程的一个重要分支。所以在写头文件时,最好是把内容都写在#ifndef和#endif之间。

下面给出#ifndef/#define/#endif的用法:

#ifndef __XXX_H__    //意思是  "if not define __XXX_H__" 也就是没包含XXX.h#define __XXX_H__   //就定义__XXX_H__...  //此处放头文件中本来应该写的代码#endif       //否则不需要定义 

若未定义XXX.h则这里就定义XXX.h,然后运行里面的内容,若下次还走到了这个文件,则进行#ifndef的判断,则#ifndef与#endif之间的内容不会再次被载入

c/c++头文件中#ifndef/#define/#endif的用法相关推荐

  1. 每日一题(12)—— .h头文件中ifndef/define/endif的作用

     .h头文件中ifndef/define/endif的作用? 分析: 防止头文件被重复包含. #ifndef _TEST_H_ #define _TEST_H_/* test.h */#endif / ...

  2. C++中#ifndef/#define/#endif使用详解

    想必很多人都看过"头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?是不能在不同的两个 ...

  3. #ifndef.#define, #endif 的用法

    文件中的#ifndef.#define, #endif 很关键,是为了避免多重包含,比如如果两个C文件同时包含同一头文件,那么就会出现问题,所以使用这种方法可以有效避免这种情况. 一般用法: 以add ...

  4. #ifndef#define#endif的用法(整理)

    1.头文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题 ...

  5. #ifndef#define#endif的用法

    你所遇到的这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是"条件编译&qu ...

  6. 头文件中能否进行函数的定义

    通常我们使用头文件时都是在头文件中进行声明,在源文件中定义,哪我们能否在头文件中进行函数的定义 我们先进行一个测试,先声明一个test.h和一个test.cpp文件,并且在test.h中定义一个函数和 ...

  7. [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法

    想必很多人都看过"头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?头文件被重复 ...

  8. ifndef/define/endif——主要目的是防止头文件的重复包含和编译

    原文:http://www.jb51.net/article/100939.htm 原文:https://blog.csdn.net/abc5382334/article/details/180527 ...

  9. C语言头文件为什么要加#ifndef #define #endif(防止头文件重复包含)

    当你用VC的菜单新增一个类,你会发现自动生成的代码总是类似下面的样子: #if !defined(AFX_XXXX__INCLUDED_)#define AFX_XXXX__INCLUDED_具体代码 ...

最新文章

  1. 计算机网络技术问题解决,计算机网络故障常见问题汇总,掌握了这些,你离女神又会更进一步...
  2. 《Javascript高级程序设计》读书笔记之对象创建
  3. i18n and L10n
  4. UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升...
  5. 分布式内存数据库的CAP-BASE原理
  6. redis cli 删除key 模糊_Redis集群及雪崩
  7. IDFA的值什么时候会发生改变
  8. 95-30-010-Channel-AbstractChannel
  9. Win32汇编——多线程
  10. UITableView设置背景为透明时遇到的问题
  11. Javascript技术之详尽解析event对象
  12. 完美手柄震动效果-xbox360手柄模拟器下载
  13. 学校教学的计算机网络教室它的网络类型,用于学校教学的计算机网络教室,它的网络类型属于( )...
  14. 儿研所 计算机训练,首都儿研所自闭症训练中心成立
  15. jzoj2742. 【PKU1625】Censored!
  16. 复旦教授报告400多个安卓漏洞,历时16个月谷歌终于修复,此前曾立flag
  17. SpringBoot利用ZXing工具来生成二维码(简单)
  18. 简历修订中,下载打开需密码
  19. UE4 设置漂浮物移动到主角的位置
  20. Java实现聊天室(TCP)

热门文章

  1. xheditor开源编辑器ajax上传功能的完善
  2. WINCE应用BINFS
  3. POJ 1150 The Last Non-zero Digit 《挑战程序设计竞赛》
  4. 成功打开华三模拟器后,创建设备完成却启动设备失败
  5. 04、Vue.js---自定义过滤器
  6. Linux初学 - SSH
  7. robots.txt网站爬虫文件设置
  8. asp.net网站安全常见问题与防范
  9. 安装windows 2003 R2额外域控制器时出现1168错误的解决
  10. Top-push Video-based Person Re-identification