C/C++ 头文件 #pragma once vs #ifndef
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.h
和bar/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相关推荐
- C语言头文件为什么要加#ifndef #define #endif(防止头文件重复包含)
当你用VC的菜单新增一个类,你会发现自动生成的代码总是类似下面的样子: #if !defined(AFX_XXXX__INCLUDED_)#define AFX_XXXX__INCLUDED_具体代码 ...
- 头文件为什么要加#ifndef #define #endif
一 #ifndef 在头文件中的作用 一个大的软件工程里有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量"重定义"的错误.这时在头文件中使用#ifn ...
- [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法
想必很多人都看过"头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?头文件被重复 ...
- C/C++ ifndef与头文件重复包含解析
ifndef 一个预处理指令,作用是判断一个符号是否存在,或者是不存在,与之对应的还有一个ifdef.ifndef一般用于解决头文件重复包含的问题. 符号 符号一般指的是,函数定义的名称,类名,宏名称 ...
- ifndef/define/endif——主要目的是防止头文件的重复包含和编译
原文:http://www.jb51.net/article/100939.htm 原文:https://blog.csdn.net/abc5382334/article/details/180527 ...
- 如何解决头文件重复包含和宏的重复定义问题:用#ifndef 、#define、#endif
如何解决头文件重复含问题 #ifndef .#define.#endif的作用是: (1)防止宏的重复定义 (2)防止有文件的重复包含 #ifndef _A_H_ #define _A_H_ .... ...
- c/c++头文件中#ifndef/#define/#endif的用法
想必很多人都看过"头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?头文件被重复 ...
- #ifndef/#define/#endif 防止该头文件被重复引用
转载自:http://blog.csdn.net/abc5382334/article/details/18052757 想必很多人都看过"头文件中的 #ifndef/#defi ...
- OpenCV 笔记(05)— opencv.hpp 头文件作用(是其它所有头文件的全集)
在编辑器中通过点击 #include "opencv2/opencv.hpp" 头文件就可以看到该头文件的定义如下 #ifndef OPENCV_ALL_HPP #define O ...
最新文章
- uva1515(模拟)
- 英语语法---介词详解
- wxWidgets:wxPGProperty类用法
- Java 线程的生命周期
- 记录搭建Odoo框架
- Python机器学习:评价分类结果004F1score
- linux mdamd工具安装,ubuntu 13.04amd64安装 wine 1.5 office2010
- linux经典命令-Web服务器管理
- 过滤DataTable中的指定字段重复的行
- k-means算法概述
- Ubuntu安装GCC 3.4
- 物联网服务器搭建记录,心得
- 安装git和创建版本库
- Weighted Boxes Fusion加权检测框合并
- Java day 31 网络编程和简单练习
- python 自动生成问卷表的软件的设计与实现 毕业设计源码291138
- 计算机与人脑的优势与缺点,科学网—《计算机与人脑》笔记 - 王龙飞的博文
- 4.11每日一题之亲戚(洛谷c++)|简单并查集
- 基于联合独立成分分析(jICA)的EEG与fMRI耦合与解耦
- 美团餐饮娱乐知识图谱——美团大脑揭秘
热门文章
- 在线作图丨数据降维方法③——正交偏最小二乘方判别分析(OPLS-DA)
- 束文圣和黄立南Nature综述极端环境中的微生物多样性
- MPB:北大口腔陈峰、陈智滨等-口腔常见微生物的培养方法
- GTDB:基因组分类数据库,物种注释和进化树构建工具GTDB-tk
- 德国波恩大学于鹏组根系与微生物互惠方向招收博士研究生
- Science评论|只需加一种菌,番茄不仅抗盐胁迫还提高65%产量!
- 查看服务器硬盘负载——判断硬盘是否为瓶颈
- 如何第一时间了解研究领域最新动态?
- 如何快速评估16S rRNA基因引物的覆盖率及特异性
- R语言ggplot2可视化:ggplot2可视化直方图(histogram)并在直方图的顶部外侧(top upper)或者直方图内部添加数值标签