#pragma once是一个比较常用的C/C++预处理指令,只要在头文件的最开始加入这条预处理指令,就能够保证头文件只被编译一次,防止头文件被重复引用。

**“被重复引用”**指头文件在cpp文件中多次被include,include嵌套造可能现象造成头文件多次引用。

举例:a.h文件#include “c.h”,b.cpp文件#include “a.h” 和#include “c.h”。此时b.h就重复引用了c.h

teacher.h

//#pragma once
class Teacher
{};

test.cpp

#include "Teacher.h"
#include "Teacher.h"//错误  C2011   “Teacher”:“class”类型重定义

方式一:#ifndef,#define,#endif

#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。

#ifndef _TEST_H_
#define _TEST_H_#endif // !TEST_H

_TEST_H_为预处理器变量

书写格式:头文件名大写,前后加下划线,“.”用下划线代替。比如test.h表示为_TEST_H_

预处理器变量两种状态:已定义或未定义

  • #ifndef 指示检测指定的预处理器变量是否未定义,如果未定义,那么跟在后面的所有指示被处理,直到出现#endif;如果已定义,#ifndef测试为假,该指示和#endif指示间的代码都被忽略
  • #define 指示接受一个名字并定义该名字为预处理器变量

在调用该头文件时一般用#include “add.h”

方式二:pragma once

#pragma once则由编译器提供保证:同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。

#pragma once

总结
#ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。

C++学习笔记之pragma once的理解相关推荐

  1. 《Java编程思想》学习笔记(一)——再度理解OOP

    实践是认识的来源和基础.是认识的动力.是检验其真理性的标准.工作一年后再回过头来看看,还是学生的时候对编程语言产生的各种疑问,突然间,好像有了那么点儿豁然开朗的感觉.但,真正的豁然开朗还是在品读了&l ...

  2. Web前端学习笔记:Vue生命周期理解

    一.感谢原创博主 示例代码出处====vue2.0 探索之路--生命周期和钩子函数的一些理解 官方文档 二.生命周期简单描述 总共分为8个阶段创建前/后,载入前/后,更新前/后,销毁前/后. 创建前/ ...

  3. JavaMail学习笔记(一)、理解邮件传输协议(SMTP、POP3、IMAP、MIME)

    电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递,就必须遵循一定的规则,这些规则就是邮件传输协议.SMTP协议定了邮件客户端与SMTP服务之间,以及两台SMTP服务器之间发送邮 ...

  4. 【最优估计学习笔记】贝叶斯公式的深入理解

    贝叶斯公式在概率论和机器学习等学科中的地位和作用不需要我再多言,我认为用"核心"和"美"来形容丝毫不为过,但是很多同学可能还对贝叶斯公式的含义不是完全理解,如果 ...

  5. [学习笔记] CDQ分治 从感性理解到彻底晕菜

    ==== €€£ WARNING ==== 这篇博文由于过于久远并没有什么干货已被废弃 新博文链接->CDQ分治&整体二分 ====                          = ...

  6. Android:安卓学习笔记之navigation的简单理解和使用

    Android navigation的简单理解和使用 1 .基本概念 1.1.背景 1.2.含义 2.组成 2.1.Navigation graph 2.2.NavHostFragment 2.3.N ...

  7. 数学学习笔记(二)柯西-黎曼方程理解

    理解不一定对,只是一种感悟,想简单记录一下. 柯西-黎曼方程是复变函数在一点可微的必要条件,证明不难.因为可微,所以就列出线性主部表出的一个式子,实部对实部,虚部对虚部,可以求得 这个方程式很简单,随 ...

  8. 线性代数学习笔记6-2:行列式的理解、行列式的性质

    再次强调,方阵才有行列式! 行列式尽可能多的压缩了方阵的信息,之前说过行列式代表线性变换中有向面积/有向体积的变化比例 因此, d e t ( A ) = ∣ A ∣ = 0 ⟺ det(\mathb ...

  9. Java学习笔记10(零压力理解继承多态权限修饰符)

    文章目录 继承 方法的重写(override) 四种访问权限修饰符: 关键字super 类对象的实例化的底层原理 多态 instanceof操作符 object类 继承 继承是Java最重要的,类之间 ...

最新文章

  1. 他考研3次,读博7年,英语极烂,却做出诺奖级成果,并获2020年度“菲列兹·伦敦奖”...
  2. clion 代码格式化 大括号换行对齐
  3. 不能将参数 2 从“const char *”转换为“LPCWSTR”【转】http://blog.sina.com.cn/s/blog_4a94a0db0100ktxp.html...
  4. 【C 语言】二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 )
  5. Pytorch:GAN生成对抗网络实现二次元人脸的生成
  6. IOS Window窗口使用
  7. 苹果计算机 win10,图文教程!苹果电脑和WIN10的完美融合井井有条的美
  8. 利用DiskGenius对电脑磁盘系统数据迁移
  9. 强化学习——A3C,GA3C
  10. 人工神经网络概念及组成,人工神经网络发展史
  11. python opencv图像笔记
  12. win10应用商店无法联网 0x80072F7D解决方案
  13. bing每日壁纸_如何将Bing的每日背景用作Ubuntu壁纸
  14. auc 和loss_如何理解机器学习和统计中的AUC?
  15. [十月往昔]——Linux内核中的内存管理浅谈
  16. 安全科普:使用Cookie会导致哪些安全问题?
  17. HTML/HTML5文本格式化标签:通过标签来美化文本外观
  18. 现在考系统集成项目管理工程师有用吗?
  19. 韩流来袭^来自星星的圣贝^
  20. 【C语言/C++】益智游戏开发:2048(源码详解)

热门文章

  1. springboot日志打印
  2. 心法利器[52] | 口语化句子解析问题
  3. 【图形学】31 Unity 的光源衰减和阴影
  4. 隐式Intent-打开浏览器
  5. 经验:《王者荣耀》技术总监分享背后技术
  6. [含lw+源码等]SSM房屋租赁系统|房屋出租|房产中介[包运行成功]
  7. CAD打印图形、输出图形
  8. 江南大学计算机系有哪些,江南大学介绍及专业分析
  9. 用的到必备工具-提升你的生产力,只推荐对的
  10. 动画Anim插值器与估值器