`
izuoyan
  • 浏览: 9222102 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较

阅读更多

C++中防止头文件被多次include 的常见方式有:

1) 用#ifndef ... #define ... #endif 宏

#ifndef __MYHEADER_H__
#define __MYHEADER_H__

// Here is my class ...

#endif

2) 用 #pragma once

#pragma once

// Here is my class ...

建议使用 #pragma once ,原因:

1) 代码简洁,维护性比较好。 #pragma once 显然比 #ifndef ... 要简短许多,而且避免了__MYHEADER_H__ 重定义 或者 #endif 包含范围错误的情况

2) 编译速度快。 使用 #ifndef 的话,编译器每次看到#include这个文件都需要读入文件,解析代码。 而使用#pragma once 编译器根本不会重复打开文件, 大大提高了效率。

以上两点在大型C++工程中表现得尤为突出。

注: #pragma once 不是国际标准, 只是微软C++ 的一个功能, 但现在多数主流C++编译器也都实现了这个功能。

>> 原创文章的版权属于作者,转载请注明出处和作者信息(http://blog.csdn.net/WinGeek/), 谢谢。 <<

分享到:
评论

相关推荐

    全面了解#pragma once与 #ifndef的区别

    2 #pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ … … // 一些声明语句 #endif 方式二...

    #pragma_命令集合.pdf

    尽管大多数现代编译器都支持该指令,但在某些特殊情况下,可能需要使用传统的预处理指令,如 `#ifndef/#define/#endif` 的组合来实现类似功能。 示例: ```c #pragma once // 头文件内容... ``` #### 4. #pragma...

    #pragma 预处理指令详解

    这相当于使用传统的`#ifndef`、`#define`和`#endif`组合来避免重复包含问题,但在现代IDE中更受欢迎且易于阅读。 ```c++ #pragma once ``` 虽然在较旧的编译器版本中(如VC6)可能不被支持,但大多数现代编译器都...

    #pragma_命令集合

    2. **替代方法**:另一种常用方法是在头文件中使用条件预编译指令(如`#ifndef`, `#define`, `#endif`),这种方法具有更好的跨编译器兼容性。 #### 五、#pragma hdrstop 指令 **功能简介**:`#pragma hdrstop`...

    pragma once的用法用的地方以及技巧什么的

    在C++中,传统的防止头文件重复包含的方法是使用预处理宏,例如通过 `#ifndef`、`#define` 和 `#endif` 这样的组合。这种方法虽然有效,但是存在一些缺点,比如增加代码量以及可能会导致宏定义的冲突等问题。相比之...

    externC_ifndef_define_endif_pragma onceDemo.zip

    在C++编程中,`extern "C"`、`#ifndef`、`#define` 和 `#endif` 是四种非常重要的预处理器指令,它们在不同场景下有着特定的作用。`pragma once` 是一个非标准但广泛使用的编译器特性,用于防止头文件被多次包含。...

    C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别

    C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别 pragma once 之前一直用的很好,今天和同事的配合中发现自己没有真正理解pragma once。 原因:同事喜欢把公共的头文件通过生成后事件复制到一个公共的...

    #pragma预处理命令整理

    与传统的`#ifndef`/`#define`/`#endif`相比,`#pragma once`更简洁且易于维护。 ##### 3. `#pragma warning` **用途**:控制编译器的警告信息,可以用来禁用某些警告或调整警告等级。 - **示例**: ```cpp #...

    Pragma用法.doc

    这与`#ifndef`、`#define`、`#endif`的include guard机制有相同的效果,但`#pragma once`更简洁,且通常被认为效率更高。例如: ```cpp #if _MSC_VER &gt; 1000 #pragma once #endif ``` 上述代码仅在Microsoft...

    Duanxx的C++学习:预处理指令 #pragma

    这是一种现代的替代方案,相较于传统的包含保护(如`#ifndef`/`#define`/`#endif`组合),它更加简洁且易于维护。 例如,如果`basic.h`文件的顶部包含了如下指令: ```cpp #pragma once ``` 那么无论`basic.h`被...

    #pragma预处理指令详解

    它简化了传统的包含保护机制(如`#ifndef`/`#define`/`#endif`),使代码更简洁。 **示例:** ```c #pragma once #include void helloWorld() { std::cout , World!" ; } ``` #### 五、`#pragma hdrstop` `#...

    mtk 下载工具源码,研究代码挺好的东西

    #ifndef SPMETA_DLL_H #include "spmeta.h" #endif #ifndef _SLA_CHALLENGE_H_ #include "sla_challenge.h" #endif #ifndef _MULTIPORT_COMMON_H_ #include "Multiport_Common.h" #endif #ifndef _FORM_MULTILOAD...

    c++预编译命令 (2).pdf

    虽然大多数现代编译器支持#include卫士(如`#ifndef`、`#define`和`#endif`),但`#pragma once`提供了一种更简洁的方式,尤其是在Visual C++中。 4. **#pragma hdrstop** 当使用预编译头文件时,`#pragma hdrstop...

    C++EGE: Ballon Ball 动画

    #pragma once #endif #ifndef __cplusplus #error You must use C++ compiler, or you need filename with '.cpp' suffix #endif #if defined(_INC_CONIO) || defined(_CONIO_H_) #error can not include "conio.h...

    PIC 芯片驱动 8563时钟的程序

    //#pragma once #ifndef _clock_8563_pic24FJ #define _clock_8563_pic24FJ #define SDA_OUT LATDbits.LATD9 #define SDA_IN PORTDbits.RD9 #define SDA_DDR TRISDbits.TRISD9 #define SCK ...

    C头文件避免重复包含问题

    值得注意的是,虽然`#pragma once`在多数情况下能有效防止头文件重复包含,但`#ifndef`...`#endif`(include guard)方法更具有移植性,因为它适用于所有遵循C/C++标准的编译器。 在实际项目中,我们还可以采用其他...

    C_语言专题_预编译和宏定义.doc

    ### C语言专题:预编译和宏定义 #### 一、概述 在C语言编程中,预编译处理是编译过程的一个重要组成部分,它在真正的编译开始之前执行一系列特殊的任务,包括宏定义、文件包含和条件编译等。预编译处理能够提高...

    C语言中的预处理器魔法:指令使用全指南

    C 语言不仅被用于操作系统、嵌入式系统和高性能服务器的开发,还深刻影响了后续诸多编程语言的设计。预处理器作为 C 语言的一个重要组成部分,在实际编程过程中发挥着关键作用。接下来我们将深入探讨预处理器指令的...

Global site tag (gtag.js) - Google Analytics