c++ #pragma once

在C/C++中,在使用预编译指令#include的时候,为了防止重复引用造成二义性,通常有两种方式

  1. #ifndef指令防止代码块重复引用

     #ifndef _CODE_BLOCK
     #define _CODE_BLOCK
    
     // code
    
     #endif// _CODE_BLOCK 
    

    保证同一份文件不会被包含两次,也能够保证不同文件完全相同的内容不会被包含两次
    (编译时需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,#ifndef会使得编译时间相对较长)

  2. #pragma once指令,在想要保护的文件开头写入

     #pragma once   
    

    只能针对一个文件(物理上的一个文件,而不是指内容相同的两个文件),不能针对一个头文件中的一段代码.
    如果某个头文件有多份拷贝,此方法不能保证它们不被重复包含。

    不会出现宏名碰撞引发的奇怪问题,大型项目的编译速度较快

总结: #ifndef更加灵活,兼容性好,#pragma once操作简单,效率高。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 yangbenbo@whu.edu.cn

文章标题:c++ #pragma once

本文作者:杨本泊

发布时间:2020-02-05, 09:59:27

最后更新:2023-07-09, 07:10:11

原始链接:http://yangbenbo.github.io/2020/02/05/c-pragma-once/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录