#pragma once 和 #ifndef

作用都是为了避免同一个被 #include 多次,或者避免头文件嵌套包含(参照前置声明的笔记)。需要特别注意的是:

  • #pragma once 并不是 C++的原生语法,而是编译器的一种支持,所以并不是所有的编译器都能够支持。#ifndef 则为 C++的标准。

  • #ifndef 依赖于不重复的宏名称,保证了包含在 #endif 的内容不会被重复包含,这个内容可以是一个文件的所有内容,或者仅仅是一段代码。而 #pragma once 则是针对物理文件的一个标记,标记该文件不会被 #include 多次,不能只针对文件中某段代码进行标记。而且,#pragma once 不能保证多个文件的拷贝不会被重复包含,但这种错误更容易发现,且 #pragma once 大大提高了编译效率。

  • 一般建议用 #pragma once,因为一个类声明和定义各占用一个物理文件,即使类声明之外的内容,也应该是和该类有关,比如非模板类中声明了模板接口,则需要在同一个文件定义该模板接口。


文章作者: BTP
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BTP !
  目录