C++中防止头文件被多次include 的常见方式有:
1) 用#ifndef ...  #define ... #endif  宏
#ifndef __MYHEADER_H__
#define __MYHEADER_H__
// Here is my class ...
#endif
2) 用 #pragma once

#pragma once

// Here is my class ...

建议使用 #pragma once ,原因:
1)  代码简洁,维护性比较好。 #pragma once 显然比 #ifndef ...  要简短许多,而且避免了__MYHEADER_H__ 重定义 或者 #endif 包含范围错误的情况
2) 编译速度快。  使用 #ifndef 的话,编译器每次看到#include这个文件都需要读入文件,解析代码。  而使用#pragma once 编译器根本不会重复打开文件, 大大提高了效率。

以上两点在大型C++工程中表现得尤为突出。
注: #pragma once 不是国际标准, 只是微软C++ 的一个功能, 但现在多数主流C++编译器也都实现了这个功能。

 

[Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较相关推荐

  1. #pragma once 和 #ifndef ... #define ... #endif 的区别【转载】

    在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. 1. #pragma message 指令 message能够在编译消息输出窗口中输出相应的消 ...

  2. 【转载】#pragma once与#ifndef #define #endif的区别

    一.相同点         两者的共同点都是为了避免同一个文件被 include 多次,但是 #ifndef #define #endif 不只有这个作用.  在能够支持这两种方式的编译器上,二者并没 ...

  3. #pragma once 和 #ifndef ... #define ... #endif 的区别

    这两者都是为了防止文件被包含多次.但是有些细微的区别: 1,来源的区别:#pragma once 是编译系统相关的,由编译器提供.而#ifndef ...#define ... #endif 是c/c ...

  4. #pragma once与#ifndef #define ...#endif的区别

    1. #pragma once用来防止某个头文件被多次include: #ifndef,#define,#endif用来防止某个宏被多次定义. 2. #pragma once是编译相关,就是说这个编译 ...

  5. #ifndef #define #endif 和#pragma once的区别

    相同点:#ifndef #define #endif 和 #pragma once 都是用来保证一个.h文件只被编译一次. 不同点: 1. #ifndef #define #endif 用来防止一个宏 ...

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

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

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

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

  8. c/c++头文件中#ifndef/#define/#endif的用法

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

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

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

最新文章

  1. python单词意思-python实现单词本功能
  2. MySQL下载与MySQL安装图解(MySQL5.7与MySQL8.0)
  3. [BZOJ1015] [JSOI2008] 星球大战starwar (并查集)
  4. 关于数据可视化的思考小结
  5. ubuntu kvm 部署安装   快照
  6. java客户端作为kafka生产者测试
  7. 文件校验和(checksum或Hash)计算工具
  8. 筹备两年,60万字诚意续作《腾讯游戏开发精粹Ⅱ》正式发布
  9. Shell定时删除日志
  10. 交易系统开发(四)——交易柜台系统
  11. 计算机程序编程就业,计算机编程就业
  12. UMTS与WCDMA
  13. 微信php带菜单事件,phpcms微信插件自定义菜单绑定栏目获取消息的实现与应用
  14. 分析的意义:数据背后的故事(1)
  15. python广告营销平台_python微信开发平台
  16. jenkins+maven+docker java项目编译、打包、构建镜像、上传私有仓库、web容器部署
  17. (10-4)redis-hash数据类型
  18. 黄复贵:从北京理工到今日头条
  19. java 0l_关于java:[L数组符号-它来自哪里?
  20. Leave-one-out——留一法

热门文章

  1. 【杂谈】开学重磅!有三AI最强资料固态硬盘开启预订,3本书视频代码PPT,两套教学视频,所有付费专栏代码+数据...
  2. 【杂谈】2020年有三AI计算机视觉培养计划详解,该不该学怎么学CV的简单讨论...
  3. 【分享预告】细数GAN和图像分类的前世今生
  4. 全球及中国便携式卧式空压机行业前景动态与投资趋势分析报告2022版
  5. 中国楼宇自控系统发展规划现状及未来前景预测报告2022-2028年版
  6. oracle 取系统当前年份_Oracle如何获取系统当前时间等操作实例
  7. Go 面向对象之结构体
  8. 初级算法——两个物种(蓝桥杯)
  9. 多生产者多消费者问题
  10. 洛谷——P1548 棋盘问题