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/), 谢谢。 <<
分享到:
相关推荐
2 #pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ … … // 一些声明语句 #endif 方式二...
尽管大多数现代编译器都支持该指令,但在某些特殊情况下,可能需要使用传统的预处理指令,如 `#ifndef/#define/#endif` 的组合来实现类似功能。 示例: ```c #pragma once // 头文件内容... ``` #### 4. #pragma...
这相当于使用传统的`#ifndef`、`#define`和`#endif`组合来避免重复包含问题,但在现代IDE中更受欢迎且易于阅读。 ```c++ #pragma once ``` 虽然在较旧的编译器版本中(如VC6)可能不被支持,但大多数现代编译器都...
2. **替代方法**:另一种常用方法是在头文件中使用条件预编译指令(如`#ifndef`, `#define`, `#endif`),这种方法具有更好的跨编译器兼容性。 #### 五、#pragma hdrstop 指令 **功能简介**:`#pragma hdrstop`...
在C++中,传统的防止头文件重复包含的方法是使用预处理宏,例如通过 `#ifndef`、`#define` 和 `#endif` 这样的组合。这种方法虽然有效,但是存在一些缺点,比如增加代码量以及可能会导致宏定义的冲突等问题。相比之...
在C++编程中,`extern "C"`、`#ifndef`、`#define` 和 `#endif` 是四种非常重要的预处理器指令,它们在不同场景下有着特定的作用。`pragma once` 是一个非标准但广泛使用的编译器特性,用于防止头文件被多次包含。...
C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别 pragma once 之前一直用的很好,今天和同事的配合中发现自己没有真正理解pragma once。 原因:同事喜欢把公共的头文件通过生成后事件复制到一个公共的...
与传统的`#ifndef`/`#define`/`#endif`相比,`#pragma once`更简洁且易于维护。 ##### 3. `#pragma warning` **用途**:控制编译器的警告信息,可以用来禁用某些警告或调整警告等级。 - **示例**: ```cpp #...
这与`#ifndef`、`#define`、`#endif`的include guard机制有相同的效果,但`#pragma once`更简洁,且通常被认为效率更高。例如: ```cpp #if _MSC_VER > 1000 #pragma once #endif ``` 上述代码仅在Microsoft...
这是一种现代的替代方案,相较于传统的包含保护(如`#ifndef`/`#define`/`#endif`组合),它更加简洁且易于维护。 例如,如果`basic.h`文件的顶部包含了如下指令: ```cpp #pragma once ``` 那么无论`basic.h`被...
它简化了传统的包含保护机制(如`#ifndef`/`#define`/`#endif`),使代码更简洁。 **示例:** ```c #pragma once #include void helloWorld() { std::cout , World!" ; } ``` #### 五、`#pragma hdrstop` `#...
#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...
虽然大多数现代编译器支持#include卫士(如`#ifndef`、`#define`和`#endif`),但`#pragma once`提供了一种更简洁的方式,尤其是在Visual C++中。 4. **#pragma hdrstop** 当使用预编译头文件时,`#pragma hdrstop...
#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...
//#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 ...
值得注意的是,虽然`#pragma once`在多数情况下能有效防止头文件重复包含,但`#ifndef`...`#endif`(include guard)方法更具有移植性,因为它适用于所有遵循C/C++标准的编译器。 在实际项目中,我们还可以采用其他...
### C语言专题:预编译和宏定义 #### 一、概述 在C语言编程中,预编译处理是编译过程的一个重要组成部分,它在真正的编译开始之前执行一系列特殊的任务,包括宏定义、文件包含和条件编译等。预编译处理能够提高...
C 语言不仅被用于操作系统、嵌入式系统和高性能服务器的开发,还深刻影响了后续诸多编程语言的设计。预处理器作为 C 语言的一个重要组成部分,在实际编程过程中发挥着关键作用。接下来我们将深入探讨预处理器指令的...