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

[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++编译器也都实现了这个功能。


 

更多相关:

  • 流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:23.8 GB |时长:44h 59m 学习C++编程和游戏开发基础和虚幻引擎 你会学到什么 通过简单的例子和插图学习C++编程基础 调试和解决问题的技能 通过虚幻引擎代...

  • 虚幻引擎C++终极射手教程 Unreal Engine C++ The Ultimate Shooter Course MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:55节课(8小时53分钟)|大小:6.72 GB 虚幻引擎...

  • 1,C#不支持多重继承,这是与C++明显区别的地方,说真的多重继承有时候用起来挺麻烦的,可能微软怕你用不好吧,不给你提供了,但我个人觉得没有了多重继承感觉有点可惜。 2.在标准的C#安全代码中不支持指针类型的操作,然而,你却能在微软所谓的“非安全代码”中操作指针类型对象。 3.C#中所有对象都只能通过关键词“new”来创建,C++的“...

  • C++所有的变量都可以在需要使用时再定义。 C语言中的变量都必须在作用域开始的位置定义。   register 关键字请求编译器将局部变量存储于寄存器中     在C语言无法获取register 变量的地址     在C++中可以取得 register 变量的地址  C++编译器有自己的优化方式,所以几乎不用register   在C...

  • 人工智能和机器学习领域有哪些有趣的开源项目?投递人 itwriter 发布于 2014-12-02 11:21 评论(0) 有20人阅读  原文链接  [收藏]  «   本文简要介绍了 10 款   Quora 上网友推荐的 人工智能和机器学习领域方面的开源项目。   GraphLab   GraphLab 是一种新的面向机器学...