c/c++头文件中#ifndef/#define/#endif的用法
想必很多人都看过“头文件中用到的 #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的用法相关推荐
- 每日一题(12)—— .h头文件中ifndef/define/endif的作用
.h头文件中ifndef/define/endif的作用? 分析: 防止头文件被重复包含. #ifndef _TEST_H_ #define _TEST_H_/* test.h */#endif / ...
- C++中#ifndef/#define/#endif使用详解
想必很多人都看过"头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?是不能在不同的两个 ...
- #ifndef.#define, #endif 的用法
文件中的#ifndef.#define, #endif 很关键,是为了避免多重包含,比如如果两个C文件同时包含同一头文件,那么就会出现问题,所以使用这种方法可以有效避免这种情况. 一般用法: 以add ...
- #ifndef#define#endif的用法(整理)
1.头文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题 ...
- #ifndef#define#endif的用法
你所遇到的这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是"条件编译&qu ...
- 头文件中能否进行函数的定义
通常我们使用头文件时都是在头文件中进行声明,在源文件中定义,哪我们能否在头文件中进行函数的定义 我们先进行一个测试,先声明一个test.h和一个test.cpp文件,并且在test.h中定义一个函数和 ...
- [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法
想必很多人都看过"头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?头文件被重复 ...
- ifndef/define/endif——主要目的是防止头文件的重复包含和编译
原文:http://www.jb51.net/article/100939.htm 原文:https://blog.csdn.net/abc5382334/article/details/180527 ...
- C语言头文件为什么要加#ifndef #define #endif(防止头文件重复包含)
当你用VC的菜单新增一个类,你会发现自动生成的代码总是类似下面的样子: #if !defined(AFX_XXXX__INCLUDED_)#define AFX_XXXX__INCLUDED_具体代码 ...
最新文章
- 计算机网络技术问题解决,计算机网络故障常见问题汇总,掌握了这些,你离女神又会更进一步...
- 《Javascript高级程序设计》读书笔记之对象创建
- i18n and L10n
- UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升...
- 分布式内存数据库的CAP-BASE原理
- redis cli 删除key 模糊_Redis集群及雪崩
- IDFA的值什么时候会发生改变
- 95-30-010-Channel-AbstractChannel
- Win32汇编——多线程
- UITableView设置背景为透明时遇到的问题
- Javascript技术之详尽解析event对象
- 完美手柄震动效果-xbox360手柄模拟器下载
- 学校教学的计算机网络教室它的网络类型,用于学校教学的计算机网络教室,它的网络类型属于( )...
- 儿研所 计算机训练,首都儿研所自闭症训练中心成立
- jzoj2742. 【PKU1625】Censored!
- 复旦教授报告400多个安卓漏洞,历时16个月谷歌终于修复,此前曾立flag
- SpringBoot利用ZXing工具来生成二维码(简单)
- 简历修订中,下载打开需密码
- UE4 设置漂浮物移动到主角的位置
- Java实现聊天室(TCP)