C++防止文件重复包含

引用自:https://blog.csdn.net/xhfight/article/details/51550446

为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。

  

(一) #ifndef的方式受C/C++语言标准支持

优点:

(1) 不光可以保证同一个文件不被包含多次,也能保证内容完全相同的两个文件(或者代码片段)不被同时包含。因为可以对文件内的代码段使用 #ifndef,控制editor模式与game模式执行不同代码

(2)受C/C++语言标准的支持,不受编译器的任何限制

缺点:

(1)如果不同头文件中的宏名不小心“撞车”,可能就会导致你看到头文件明明存在,编译器却硬说找不到声明的状况——这种情况有时非常让人抓狂。

(2)由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,ifndef会使得编译时间相对较长,因此一些编译器逐渐开始支持#pragma 
once的方式。

(二)#pragma once一般由编译器提供保证。

同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。你无法对一个头文件中的一段代码作pragma once声明,而只能针对文件。

优点:

(1)你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。

(2)大型项目的编译速度也因此提高了一些。

缺点:

(1)就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,这种重复包含很容易被发现并修正。

(2)而#pragma once方式却不受一些较老版本的编译器支持,一些支持了的编译器又打算去掉它,所以它的兼容性可能不够好。

posted on 2018-06-29 17:02 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

C++防止文件重复包含相关推荐

  1. C语言 define 防止头文件重复包含 - C语言零基础入门教程

    目录 一.头文件重复包含编译器报错 1.简单的理解头文件重复包 2.老流氓的理解头文件重复包 二.通过宏定义解决头文件重复包含 1.通过 #ifndef / #define 解决头文件重复包含 2.通 ...

  2. 防止头文件重复包含之pragma once与#ifndef

    在我们自己编写 C/C++的头文件时,可能会忽略一点:用一些处理机制来避免头文件的重复包含,因为头文件的内容在预编译时是把头文件的内容完全拷贝到引入的地方替换头文件的包含命令,而包含的头文件可能有包含 ...

  3. c++ 1:非MFC工程使用MFC库时的问题及解决办法(如果要用CString或者提示windows头文件重复包含)...

    非MFC工程使用MFC库时的问题及解决办法(如果要用CString或者提示windows头文件重复包含) vc6和vc71的工程向导中都包含非MFC的工程,诸如win32 console projec ...

  4. C++头文件重复包含问题分析及解决方案

    一.头文件重复包含问题分析 1) 问题重现 举例说明.假设在某个C++ 头文件 或 源文件 中,包含了A.h和B.h两个头文件: #include "A.h" #include & ...

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

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

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

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

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

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

  8. 套头文件html重复,关于C++头文件重复包含的问题

    #ifndef PEOPLE_H #define PEOPLE_H /* - */ #endif 这样写能够防止头文件被重复包含 在头文件中定义变量不是不规范,而是一种错误. 原因在于 如果在head ...

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

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

最新文章

  1. 这次真的是下定决心了
  2. opencv中的imread不支持中文路径的解决办法
  3. 怎么样使用git克隆网站上的代码到本地文件夹(快捷)
  4. 002.ICMP--拼接ICMP包,实现简单Ping程序(原始套接字)
  5. android吸附菜单,Android仿微博、人人Feed详情页吸附导航栏
  6. C# 读取机器CPU信息,硬盘信息,网卡信息(转载)
  7. webpack 3 零基础入门教程 #16 - 使用 ProvidePlugin 插件来处理像 jQuery 这样的第三方包...
  8. QPCore Service与NetAssist冲突解决
  9. ykhmi是什么触摸屏软件_一体机使用中常见问题-中达优控|YKHMI|触摸屏|一体机|云组态-深圳市中达优控科技有限公司 —— YKHMI|触摸屏|一体机|云组态...
  10. 微信群二维码活码生成源码
  11. 红米note4x装linux,红米Note4X自己安装Magisk的过程
  12. 基于Vue开发的电商APP项目(仿蘑菇街)
  13. 【操作系统基础】操作系统的分类与发展
  14. 海康摄像头二次开发python_海康摄像头的二次开发(java)
  15. 青岛大学计算机专业春考,青岛大学春季高考专业
  16. 大家玩突袭2吗?呵呵我有秘籍哟!
  17. 优麒麟服务器配置备忘
  18. 2019越南通讯展ICTCOMM VIETNAM
  19. Unity插件介绍:Flux的上手教程
  20. 智驾科技招聘|SLAM算法总监、感知定位、高精地图等岗位(20~50K)

热门文章

  1. 笔记-项目配置管理-配置管理主要工作
  2. SpringBoot+Vue+HIKVSION实现摄像头多选并多窗口预览(插件版)
  3. Angualr中通过原生js和ViewChild的方式获取dom
  4. 【Python】编程笔记8
  5. 求正多边形的面积JAVA_第六章第三十六题(几何:正多边形的面积)(Geometry: area of a regular polygon)...
  6. 万豪旅享家官方商城携手神策数据,数字化礼遇更高质量的用户体验
  7. 一家创业公司,如何服务好数百企业?
  8. 【译】 Web Components 的高级工具
  9. Android下添加新的自定义键值和按键处理流程【转】
  10. HiveQL之Database相关操作