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

#ifndef    #define   #endif :

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

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

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

#pragma once:

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

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

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

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

365个夜晚,我希望做到两天更一篇博客。加油,小白!
原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/12201358.html