C/C++ 头文件防止被重复包含有2种常用的做法,一种是传统的ifndef

#ifndef HEADER_H
#define HEADER_H...#endif // HEADER_H

另一种是稍微新一些的pragma once:

#pragma once
...

远古gcc版本不支持pragma once–gcc 3.4之前的版本不支持pragma once,也就是2006年前的gcc,现在应该没人用这么古老的编译器吧。

我找到2个问答:
c++ - #pragma once vs include guards? - Stack Overflow
c++ - Is #pragma once a safe include guard? - Stack Overflow

里面的大部分回答都是支持使用pragma once,因为更方便,更不容易出错,也更快。

不容易出错的意思是,比如有2个头文件foo/string.hbar/string.h,如果使用#ifndef,并且都定义为
#ifndef STRING_H,那么这2个头文件会冲突,而且出错后会很难找到问题存在的原因,但是使用pragma once,
编译器会自动帮你做这些工作,让你不用担心头文件命名的问题。

但是pragma once也是可能会出错的,根据一个回答的推测,比如说foo.h../a/foo.h对于gcc编译器来说是不一样的??
这条内容有待验证。

如果你写的工程项目不大,那么推荐使用pragma once,如果你写的工程项目非常大,推荐做法如下:

#ifndef HEADER_H
#define HEADER_H
#pragma once
...
#endif // HEADER_H

这样的话双重保险。
反正我用pragma once,非常方便,没遇到过问题。

C/C++ 头文件 #pragma once vs #ifndef相关推荐

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

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

  2. 头文件为什么要加#ifndef #define #endif

    一 #ifndef 在头文件中的作用 一个大的软件工程里有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量"重定义"的错误.这时在头文件中使用#ifn ...

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

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

  4. C/C++ ifndef与头文件重复包含解析

    ifndef 一个预处理指令,作用是判断一个符号是否存在,或者是不存在,与之对应的还有一个ifdef.ifndef一般用于解决头文件重复包含的问题. 符号 符号一般指的是,函数定义的名称,类名,宏名称 ...

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

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

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

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

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

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

  8. #ifndef/#define/#endif 防止该头文件被重复引用

       转载自:http://blog.csdn.net/abc5382334/article/details/18052757    想必很多人都看过"头文件中的 #ifndef/#defi ...

  9. OpenCV 笔记(05)— opencv.hpp 头文件作用(是其它所有头文件的全集)

    在编辑器中通过点击 #include "opencv2/opencv.hpp" 头文件就可以看到该头文件的定义如下 #ifndef OPENCV_ALL_HPP #define O ...

最新文章

  1. uva1515(模拟)
  2. 英语语法---介词详解
  3. wxWidgets:wxPGProperty类用法
  4. Java 线程的生命周期
  5. 记录搭建Odoo框架
  6. Python机器学习:评价分类结果004F1score
  7. linux mdamd工具安装,ubuntu 13.04amd64安装 wine 1.5 office2010
  8. linux经典命令-Web服务器管理
  9. 过滤DataTable中的指定字段重复的行
  10. k-means算法概述
  11. Ubuntu安装GCC 3.4
  12. 物联网服务器搭建记录,心得
  13. 安装git和创建版本库
  14. Weighted Boxes Fusion加权检测框合并
  15. Java day 31 网络编程和简单练习
  16. python 自动生成问卷表的软件的设计与实现 毕业设计源码291138
  17. 计算机与人脑的优势与缺点,科学网—《计算机与人脑》笔记 - 王龙飞的博文
  18. 4.11每日一题之亲戚(洛谷c++)|简单并查集
  19. 基于联合独立成分分析(jICA)的EEG与fMRI耦合与解耦
  20. 美团餐饮娱乐知识图谱——美团大脑揭秘

热门文章

  1. 在线作图丨数据降维方法③——正交偏最小二乘方判别分析(OPLS-DA)
  2. 束文圣和黄立南Nature综述极端环境中的微生物多样性
  3. MPB:北大口腔陈峰、陈智滨等-口腔常见微生物的培养方法
  4. GTDB:基因组分类数据库,物种注释和进化树构建工具GTDB-tk
  5. 德国波恩大学于鹏组根系与微生物互惠方向招收博士研究生
  6. Science评论|只需加一种菌,番茄不仅抗盐胁迫还提高65%产量!
  7. 查看服务器硬盘负载——判断硬盘是否为瓶颈
  8. 如何第一时间了解研究领域最新动态?
  9. 如何快速评估16S rRNA基因引物的覆盖率及特异性
  10. R语言ggplot2可视化:ggplot2可视化直方图(histogram)并在直方图的顶部外侧(top upper)或者直方图内部添加数值标签