#pragma once 与 #ifndef #define #endif 的不同

#ifndef    #define   #endif :

  是宏定义的一种,实际上确切的说,这应该是预处理功能三种(宏定义、文件包含、条件编译)中的一种----条件编译。

  通过宏定义避免文件多次编译,依赖于宏名字不能冲突。他读到#ifndef之后,如果已经定义过了,就会跳过这一大片,一直到#endif为止。build时间长,因为每次compiler都会打开这个文件,然后搜索全文件一遍。

  在所有支持C++语言的编译器上都是有效的。

#pragma once:

  而如果碰到了#pragma once,他就会立刻停止,build时间短;

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

  缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。

  在MS平台编译系统和大部分编译系统上能用,移植型差。

posted @   ꧁执笔小白꧂  阅读(224)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示