原文链接:https://www.cnblogs.com/qiang-upc/p/11407364.html

(1)C/C++防止头文件被include多次的方法:#ifnde..  及  #pragma once

(2)二者都是宏实现

(3)#ifndef 不仅可以保证同一个文件不会被包含多次,而且可以保证文件内容完全相同的两个文件被同时包含,不受编译器的控制。

但是,如果宏名 不小心冲突,则会出现编译器找不到 文件的问题, 同时,在大型的项目中,#ifndef需要打开头文件进行重复定义的检查,编译时间较长。

(4)#pragma once 由编译器保证,物理上相同的同一文件(并不指内容上相同)不会被include多次。#pragma once只针对文件,并不针对一段代码。

缺点:如果多个头文件发生拷贝,并不保证不被包含,不支持跨平台。

c++中#ifndef ... 与#pragma once的区别的更多相关文章

  1. 看了看 #ifndef 和#pragma once 的区别

    刚开始学习程序的时候,老师就说过用#ifndef 这样的结构防止头文件被重复包含,所以就没有关心那么多.今天可能由于自家底层系统缘故,陈工说最好还是用#pragma once ,于是查了下两个的区别, ...

  2. #ifndef 与 #program once 的区别(转)

    转自http://hi.baidu.com/hrx20091001/item/ee70f7cc6d036d4ea9ba94e0 #ifndef 与 #program once 的区别 为了避免同一个文 ...

  3. C语言中 *.c和*.h文件的区别!

    C语言中 *.c和*.h文件的区别!  http://blog.163.com/jiaoruijun07@126/blog/static/68943278201042064246409/        ...

  4. delphi中Record 和Packed Record的区别

    Record 和Packed Record 第一种不带packed关键字的结构体表明编译器编译时要求进行字对齐,而第二种带packed关键字的结构体表明编译器编译该结构体时不需要进行字对齐,这种方式对 ...

  5. 2)#ifndef和#pragma once

    #################################################################################################### ...

  6. JDBC中的Statement和PreparedStatement的区别

    JDBC中的Statement和PreparedStatement的区别  

  7. LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别

    LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: s ...

  8. JavaScript中const、var和let区别浅析

    在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...

  9. 【前端】js中new和Object.create()的区别

    js中new和Object.create()的区别 var Parent = function (id) { this.id = id this.classname = 'Parent' } Pare ...

随机推荐

  1. Nginx+Tomcat+Memcache 实现session共享

    Nginx + Tomcat + Memcache 实现session共享 1. Nginx 部署 1.上传源码包到服务器,解压安装 下载地址:http://nginx.org/en/download ...

  2. 转载:RAID5和RAID10,哪种RAID更适合你

    转自 http://storage.it168.com/h/2007-06-28/200706281204046_3.shtml 存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储 ...

  3. ng 判定输入的手机号是否正确

    判定输入的手机号是否正确   infoConfirm(){        if (!/^1[3456789]\d{9}$/.test(this.mobile)) {          this.pho ...

  4. mysql百万级数据分页查询缓慢优化-实战

    作为后端攻城狮,在接到分页list需求的时候,内心是这样的 画面是这样的 代码大概是这样的 select count(id) from …       查出总数 select * from …. li ...

  5. playtime-浙大羽协裁判部训练方案[随机事件序列的应用]

    首先随机一列人名 然后按比例随机一列事件项. 然后将不确定项的人名更正为“某人”[比如发球违例,,,你怎么知道谁在发球] 最后定义一个初始化. 初始化呢,就是挑边. 球权还是场权? 发球还是接发? 谁 ...

  6. css彩虹文字

    用CSS3实现彩虹文字的效果,只在Webkit内核的浏览器(谷歌浏览器或移动端)上有效果. background-image: -webkit-gradient(linear, left top, r ...

  7. Spring Security OAuth2 Demo —— 客户端模式(ClientCredentials)

    前情回顾 前几节分享了OAuth2的流程与其它三种授权模式,这几种授权模式复杂程度由大至小:授权码模式 > 隐式授权模式 > 密码模式 > 客户端模式 本文要讲的是最后一种也是最简单 ...

  8. Kubernetes Job与CronJob(离线业务)

    Kubernetes Job与CronJob(离线业务) Job Job分为普通任务(Job)  一次性执行 应用场景:离线数据处理,视频解码等业务 官方文档:https://kubernetes.i ...

  9. Docker 指定数据储存目录

    Docker 指定储存目录(原参数 --graph 已经失效 .) 方法一 一.在 Docker 配置文件中配置 /etc/docker/daemon.json 下面的命令是在 daemon.json ...

  10. 【C#夯实】我与接口二三事:IEnumerable、IQueryable 与 LINQ

    序 学生时期,有过小组作业,当时分工一人做那么两三个页面,然而在前端差不多的时候,我和另一个同学发生了争执.当时用的是简单的三层架构(DLL.BLL.UI),我个人觉得各写各的吧,到时候合并,而他觉得 ...