#ifndef HeaderName_h #define HeaderName_h #endif 使用详解
想必很多人都看到过头文件中写有:#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 使用详解相关推荐
- 如何解决头文件重复包含和宏的重复定义问题:用#ifndef 、#define、#endif
如何解决头文件重复含问题 #ifndef .#define.#endif的作用是: (1)防止宏的重复定义 (2)防止有文件的重复包含 #ifndef _A_H_ #define _A_H_ .... ...
- 用#ifndef、#define、#endif避免头文件的重定义
在一个大型项目里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量"重定义"的错误.在头文件中使用#ifndef.#define.#endi ...
- #ifdef,#ifndef,#define,#endif解析(原)
我们在看一些开源的源代码的时候,经常会看到如下情景: # if defined(_PTHREADS) && !defined(_NOTHREADS) # define __STL_PT ...
- [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法
想必很多人都看过"头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?头文件被重复 ...
- C++中#ifndef/#define/#endif使用详解
想必很多人都看过"头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?是不能在不同的两个 ...
- #ifndef/#define/#endif使用详解
https://blog.csdn.net/abc5382334/article/details/18052757 想必很多人都看过"头文件中的 #ifndef/#define/#endif ...
- 【c】写头文件要加#ifndef,#define, #endif
头文件首位 编写.h时, 最好加上如下,用来防止重复包含头文件: 例如: 要编写头文件test.h 在头文件开头写上两行:#ifndef _TEST_H#define _TEST_H// 文件名的大写 ...
- #ifndef、#define、#endif作用
1. 作用 防止头文件被重复引用,防止被重复编译. 2. 简介 #ifndef 它是if not define的简写,是宏定义的一种,确切的说是预处理功能(宏定义.文件包含.条件编译)三种中的一种-- ...
- php define 常量,phpdefine常量详解
class A { public function __toString() { return 'bar'; } } $a = new A(); define('foo', $a); echo foo ...
最新文章
- 当技术面试官的一些心得
- jsp工程防止外部注入_防止 jsp被sql注入的五种方法
- 降价200!华为部分手机已取消充电器和数据线,网友表示可以接受
- the catalina_home environment variable
- .net5 程序 在docker 中运行
- 虚拟机VMware安装Windows7保姆级教程
- Dubbo异常 Can not lock the registry cache file解决方案
- Web前端工程师怎么样呢?薪资待遇如何呢?
- Keil(MDK-ARM)的安装与注册【MDK和C51共存】
- Vscode配置Vue插件Vetur自动补全和Eslint校验,正在保存“index.vue”: 从 “‘ESLint‘, ‘Vetur‘“ (configure)中获取代码操作
- 使用Lumberjack进行日志切割归档
- Qt读写JSON,以及使用QTreeView展示和编辑JSON数据
- 计算机专业产品开发译码,计算机专业前景可好
- 关于数据集划分比例问题
- 企业人事工资管理系统(源码+数据库+三层架构)
- c语言程序的执行过程
- 我写了一个脚本,实现了图片分类问题的全自动化训练
- 职高必背计算机知识点,有哪些常用的Excel函数?高职高考考生考计算机必备!...
- JavaScript函数简介
- fastDfs上传下载删除文件
热门文章
- 2018年12月精选文章目录一览
- 慧材技术中核普达测量与测绘系统介绍(一)
- C++ vector类型要点总结(以及各种algorithm算法函数)
- Matlab线性/非线性规划优化算法(1)
- Bezier(贝塞尔)曲线(五阶)的轨迹规划在自动驾驶中的应用(五)
- php大量数据库抽象,PHP系列(十二)数据库抽象层pdo
- 将之前写完的猜数字游戏改为通过javabean_42个宝宝益智游戏良心整理!让宝宝快人一步更聪明...
- 豆瓣 为什么不用php,豆瓣网友是不是都疯了?
- k8s边缘节点_KubeEdge v0.2发布,全球首个K8S原生的边缘计算平台开放云端代码
- Java基础---代码块和final关键字