文章目录

  • pragma once 的作用
  • 两种方式的区别
  • 参考

pragma once 的作用


#pragma once 是一个比较常用的 C/C++ 预处理指令,只要在头文件的最开始加入这条预处理指令,就能够保证头文件只被编译一次。
#pragma once 是与编译器相关的,有的编译器支持,有的编译器不支持,具体情况要看编译器 API 文档,不过现在大部分编译器都支持;

防止头文件被多次编译的方式还有:#ifndef、#define、#endif,它们是 C/C++ 语言中的宏定义,在所以支持 C/C++ 语言的编译器上都是有效的。如果要写跨平台程序,最好使用这种形式;以下是使用两种形式的方式

// 方式一
#ifndef __HEADER_H_
#define __HEADER_H_
...    // 需要声明的语句
#endif// 方式二
#pragma once
...    // 需要声明的语句

两种方式的区别


  • #ifndef 的方式依赖于 宏名 不能冲突,可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被同时包含。缺点就是如果不同头文件的 宏名 相同,会导致头文件明明存在,编译器却说找不到声明的状况;
  • #pragma once 则由编译器提供保证:同一个文件不会被编译多次。优点是:不必担心两个文件是否宏名相同。缺点是:如果存在多份相同的头文件,会被重复包含。相比宏名碰撞引发的 “找不到声明” 的问题,重复包含更容易被发现并修正;
  • #ifdef 由语言支持所以移植性好,#pragma once 可以避免名字冲突;

#pragma once 方式产生于 #ifndef 之后,因此很多人可能甚至没有听说过。目前看来 #ifndef 更受到推崇。因为 #ifndef 受语言天生的支持,不受编译器的任何限制;而 #pragma once 方式却不受一些较老版本的编译器支持,换言之,它的兼容性不够好。也许,再过几年等旧的编译器死绝了,这就不是什么问题了.

参考


  1. 参考《百度百科》;

#pragama once 的作用相关推荐

  1. Object的finalize()方法的作用是否与C++的析构函数作用相同

    Object的finalize()方法的作用是否与C++的析构函数作用相同 public class Finalization {private static Finalization finaliz ...

  2. 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin

    1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...

  3. 【B/S实践】解决:vs中修改样式表后不起作用的问题

    缓存,有好多,cpu和内存之间的三级缓存,浏览器内的缓存! 缓存是因为速率不对等,通过缓存来加速内容的显示! 今天我在敲牛腩的时候遇到一个问题,找了半小时,才发现是缓存导致的问题! 试着运行aspx文 ...

  4. 卷积神经网络之卷积计算、作用与思想 深度学习

    博客:blog.shinelee.me | 博客园 | CSDN 卷积运算与相关运算 在计算机视觉领域,卷积核.滤波器通常为较小尺寸的矩阵,比如3×33×3.从这个角度看,多层卷积是在进行逐层映射,整 ...

  5. 机器学习——标准化/归一化的目的、作用和场景

    对每个特征进行归一化处理,使得每个特征的取值缩放到0~1之间.这样做有两个好处: 模型训练更高效. 特征前的权重大小可代表该变量对预测结果的贡献度(因为每个特征值本身的范围相同). (一)归一化的作用 ...

  6. Linux操作系统下文件作用

    linux下的文件结构,看看每个文件夹都是干吗用的 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的 ...

  7. python sys.argv[] 的作用

    sys.argv[]是什么 argv 是sys库里面的所以使用的 需要先引入sys (使用import sys) sys.argv[]的作用 从程序外获取参数,怎样理解呢,例如在终端中运行test脚本 ...

  8. C++ namespace 的作用以及使用

    namespace 是什么: 命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个任务中的所有类声明放在同一个命名空间中.标准C++库(不包括标准C库)中所包含的 ...

  9. Android Environment 的作用以及常用的方法

    从源码中可以看到这样一句话 Provides access to environment variables Environment的作用是:  提供对环境变量的访问 常见的方法 //外部存储设备的当 ...

最新文章

  1. 商汤作价1026亿IPO,商业化汤教授身家220亿
  2. android 实现悬架控制
  3. LeetCode 1470. 重新排列数组
  4. 【黑金ZYNQ7000系列原创视频教程】02.视频接口mdash;mdash;hdmi编码输出实验
  5. Markdown--表格语法
  6. 中国天然玉米黄质市场趋势报告、技术动态创新及市场预测
  7. mongodb最大连接数、最大连接数修改
  8. dijkstra 算法_路径规划算法总结
  9. STM8S与IAR程序常用错误
  10. 阿里云云计算 16 块存储的概念
  11. 仙剑奇侠传五破解方法(虚拟机版)
  12. 舞台音效控制软件_舞台音乐控制软件下载
  13. 【渝粤题库】陕西师范大学201041德育论 作业(专升本)
  14. 教你如何用python把玩守望先锋新英雄
  15. ref、reactive、toRef、toRefs的区别
  16. java灌水bfs二叉树,二叉树的BFS搜索
  17. 计算机学院新生篮球赛名字,计算机学院新生篮球赛圆满结束,获奖队伍公布!...
  18. 新视野大学英语第三版第二册视听说答案
  19. ANDROID动态加载 使用SO库时要注意的一些问题
  20. 如何根据某一列数据合并多个excel为

热门文章

  1. mysql删除索引很慢_mysql建立索引删除索引很慢的解决_MySQL
  2. 【简洁明了MySQL】MySQL基础操作之连接,创建和删除数据库
  3. Charles电脑及手机https抓包设置
  4. 基于百度云人脸融合API的python实现视频人像换脸
  5. 智慧社区(GIS+大数据+政府主导型智慧社区-完美的系统迭代更新至2.4版本)
  6. JS 数组去重的4个方法
  7. java ejb3开发_月光软件站 - 编程文档 - Java - 使用EJB3.O简化EJB开发(三)
  8. 申万宏源程序化接口的编写
  9. 每日黑巧携品牌全球代言人王一博发布新一代健康巧克力
  10. 我不曾忘记的初心-程序员如何看待买房子