想必很多人都看到过头文件中写有:#ifndef HeaderName_h

                                               #define HeaderName_h

                                                  // 这里面通常写各种宏定义、其他头文件的包含

                                               #endif 

这样做的目的:防止该头文件被重复引用。

“头文件被重复引用”是什么意思?

答:其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。

比如:存在a.h文件#include "c.h",而b.cpp文件同时#include "a.h" 和#include "c.h",此时就会造成c.h被b.cpp重复引用。

 

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

有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些。但是对于大工程而言,编译效率低下那将是一件多么痛苦的事情。

而有些头文件重复包含,则会引起错误,比如:在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是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   (否则不需要引入a.h,即已存在a.h,无需再次引入)

例:
#ifndef GRAPHICS_H // 防止graphics.h被重复引用 
#define GRAPHICS_H 


#include <math.h> // 引用标准库的头文件 
… 
#include “header.h” // 引用非标准库的头文件 
… 
void Function1(…); // 全局函数声明 
… 
class Box // 类结构声明 

… 
}; 

#endif

 

转载于:https://www.cnblogs.com/hello-Huashan/p/5545244.html

#ifndef HeaderName_h #define HeaderName_h #endif 使用详解相关推荐

  1. 如何解决头文件重复包含和宏的重复定义问题:用#ifndef 、#define、#endif

    如何解决头文件重复含问题 #ifndef .#define.#endif的作用是: (1)防止宏的重复定义 (2)防止有文件的重复包含 #ifndef _A_H_ #define _A_H_ .... ...

  2. 用#ifndef、#define、#endif避免头文件的重定义

    在一个大型项目里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量"重定义"的错误.在头文件中使用#ifndef.#define.#endi ...

  3. #ifdef,#ifndef,#define,#endif解析(原)

    我们在看一些开源的源代码的时候,经常会看到如下情景: # if defined(_PTHREADS) && !defined(_NOTHREADS) # define __STL_PT ...

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

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

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

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

  6. #ifndef/#define/#endif使用详解

    https://blog.csdn.net/abc5382334/article/details/18052757 想必很多人都看过"头文件中的 #ifndef/#define/#endif ...

  7. 【c】写头文件要加#ifndef,#define, #endif

    头文件首位 编写.h时, 最好加上如下,用来防止重复包含头文件: 例如: 要编写头文件test.h 在头文件开头写上两行:#ifndef _TEST_H#define _TEST_H// 文件名的大写 ...

  8. #ifndef、#define、#endif作用

    1. 作用 防止头文件被重复引用,防止被重复编译. 2. 简介 #ifndef 它是if not define的简写,是宏定义的一种,确切的说是预处理功能(宏定义.文件包含.条件编译)三种中的一种-- ...

  9. php define 常量,phpdefine常量详解

    class A { public function __toString() { return 'bar'; } } $a = new A(); define('foo', $a); echo foo ...

最新文章

  1. 当技术面试官的一些心得
  2. jsp工程防止外部注入_防止 jsp被sql注入的五种方法
  3. 降价200!华为部分手机已取消充电器和数据线,网友表示可以接受
  4. the catalina_home environment variable
  5. .net5 程序 在docker 中运行
  6. 虚拟机VMware安装Windows7保姆级教程
  7. Dubbo异常 Can not lock the registry cache file解决方案
  8. Web前端工程师怎么样呢?薪资待遇如何呢?
  9. Keil(MDK-ARM)的安装与注册【MDK和C51共存】
  10. Vscode配置Vue插件Vetur自动补全和Eslint校验,正在保存“index.vue”: 从 “‘ESLint‘, ‘Vetur‘“ (configure)中获取代码操作
  11. 使用Lumberjack进行日志切割归档
  12. Qt读写JSON,以及使用QTreeView展示和编辑JSON数据
  13. 计算机专业产品开发译码,计算机专业前景可好
  14. 关于数据集划分比例问题
  15. 企业人事工资管理系统(源码+数据库+三层架构)
  16. c语言程序的执行过程
  17. 我写了一个脚本,实现了图片分类问题的全自动化训练
  18. 职高必背计算机知识点,有哪些常用的Excel函数?高职高考考生考计算机必备!...
  19. JavaScript函数简介
  20. fastDfs上传下载删除文件

热门文章

  1. 2018年12月精选文章目录一览
  2. 慧材技术中核普达测量与测绘系统介绍(一)
  3. C++ vector类型要点总结(以及各种algorithm算法函数)
  4. Matlab线性/非线性规划优化算法(1)
  5. Bezier(贝塞尔)曲线(五阶)的轨迹规划在自动驾驶中的应用(五)
  6. php大量数据库抽象,PHP系列(十二)数据库抽象层pdo
  7. 将之前写完的猜数字游戏改为通过javabean_42个宝宝益智游戏良心整理!让宝宝快人一步更聪明...
  8. 豆瓣 为什么不用php,豆瓣网友是不是都疯了?
  9. k8s边缘节点_KubeEdge v0.2发布,全球首个K8S原生的边缘计算平台开放云端代码
  10. Java基础---代码块和final关键字