`
seaizon
  • 浏览: 137326 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

#pragma once与 #ifndef的区别(转)

    博客分类:
  • C++
 
阅读更多

#pragma once与 #ifndef的区别

为了避免同一个文件被include多次

1   #ifndef方式
2   #pragma once方式

在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。
    方式一:

    #ifndef __SOMEFILE_H__
    #define __SOMEFILE_H__
    ... ... // 一些声明语句
    #endif

    方式二:

    #pragma once
    ... ... // 一些声明语句


    #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况

    #pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处 是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当 然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。

   方式一由语言支持所以移植性好,方式二 可以避免名字冲突

 

转载自:http://www.cppblog.com/szhoftuncun/archive/2007/10/28/35356.html

分享到:
评论

相关推荐

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

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

    C语言头文件避免重复包含、#pragma once和#ifndef区别

    一般情况下,我们都是把函数声明、类定义、模板定义等写到一个头文件里,需要时将相应的头文件用#include包含到源文件(*.cpp文件)里来。但头文件中又允许包含其它的头文件,这样就难免发生某个头文件被重复地包含...

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

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

    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...

    C语言/C++常见笔试面试题难疑点汇总

    #pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef则是基于宏的。 当类不包含任何成员的时候,大小本该是0,但是为了便于区分,大小是1 .c是标准C程序文件名的后缀;.cpp则是C++程序文件名...

    运动会分数统计 C++

    #pragma once #endif #ifndef _INC_EH #define _INC_EH #if !defined(_WIN32) && !defined(_MAC) #error ERROR: Only Mac or Win32 targets supported! #endif #ifdef _MSC_VER // Currently, all MS C ...

    扫雷的源代码(C++语言版)

    #pragma once #include <afxwin.h> //mine struct struct Mine { UINT i;//纵坐标 Y UINT j;//横坐标 X UINT ID;//格子iD 0~9 iD 10 标示地雷 区别于其他ID UINT flag;//格子标志 问号 旗子 BOOL bMine;//...

    语音信号四特征四状态端点检测系统源代码1

    // stdafx.h : 标准系统包含文件的包含文件,// 或是经常使用但不常更改的// 特定于项目的包含文件#pragma once#ifndef _SEC

    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 ...

    HK StreamMediaPlayer DEMO

    浙江海康威视硬盘录像机播放器DEMO / stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常...#pragma once #ifndef VC_EXTRALEAN #define VC_EXTRALEAN // 从 Windows 标头中排除不常使用的资料 #endif

    C++选择文件夹代码的封装

    代码如下:#pragma once  #ifndef __DIRDIALOG_H_HH  #define __DIRDIALOG_H_HH  #include   class CDirDialog  {  protected:   BROWSEINFO m_bi;   char m_szDisplayName[MAX_PATH]; //显示名称   

    C++实现循环队列

    #pragma once #pragma once #ifndef CIRCULARQUEUE_H #define CIRCULARQUEUE_H #include #include using std::cout; using std::cin; using std::endl; using std::ostream; template<class> class cirQueue; ...

    C语言 时钟

    #pragma once #endif // _MSC_VER > 1000 #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include <afxwin.h> // MFC core and standard components #include <afxext.h> // MFC ...

    listview_5.zip

    #pragma once #endif // _MSC_VER >= 1000 #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include <afxwin.h> // MFC core and standard components #include <afxext.h> // MFC ...

    XPButton控件

    #pragma once #endif // _MSC_VER >= 1000 // Return values #ifndef BTNST_OK #define BTNST_OK 0 #endif #ifndef BTNST_INVALIDRESOURCE #define BTNST_INVALIDRESOURCE 1 #endif #ifndef BTNST_FAILEDMASK #...

    C++通过类实现控制台贪吃蛇

    #pragma once #ifndef SNACK_H #define SNACK_H #define Frame_X 5//边框起点横坐标 #define Frame_Y 5//边框起点纵坐标 #define Frame_width 50//边框长度 #define Frame_height 25//边框高度 struct point//蛇个点...

    vc StdAfx头文件

    #pragma once #endif // _MSC_VER > 1000 #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include <afxwin.h> // MFC core and standard components #include <afxext.h> // MFC ...

    VS2010+Opencv+MFC读取图像和视频显示在Picture控件

    VS2010+Opencv+MFC读取图像和视频显示在Picture控件,供大家参考,具体内容如下 1.新建MFC对话框应用程序。 其余选项默认,单击完成,创建出...#pragma once #ifndef CVVIMAGE_CLASS_DEF #define CVVIMAGE_CLASS_DEF #i

Global site tag (gtag.js) - Google Analytics