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

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

1   #ifndef方式
2   #pragma once方式

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

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

方式二:

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

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

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

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

#pragma once与 #ifndef的区别 (转)相关推荐

  1. #pragma once与#ifndef的区别

    #pragma once 和 #ifdef 都可以避免同一个文件被include多次,但二者的含义略有不同. 1. #pragma once方式 1.1. 使用方法 #pragma once// co ...

  2. #pragma once与 #ifndef的区别为了避免同一个文件被include多次

    #pragma once与 #ifndef的区别为了避免同一个文件被include多次 1   #ifndef方式 2   #pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大 ...

  3. 【c/c++】#pragma once 与 #ifndef 的区别解析

    转载 [c/c++]#pragma once 与 #ifndef 的区别解析 2016-03-03 10:03:04 小明6号 阅读数 5092更多 分类专栏: [c/c++] 查看全文 http:/ ...

  4. #pragma once与 #ifndef的区别

    2019独角兽企业重金招聘Python工程师标准>>> 为了避免同一个文件被include多次 1   #ifndef方式 2   #pragma once方式 在能够支持这两种方式 ...

  5. c/c++ 避免重复包含 pragma once 和 #ifndef 的区别

    1.#pragmaonce这个宏有什么作用? 为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式:另一种是#pragma once方式. 在能够支 ...

  6. #pragma once与#ifndef的区别?

    /* 2017-12-20 创建人:Ruo_Xiao */ 一.#pragma once 作用:只要在头文件的最开始加入这条指令就能够保证头文件被编译一次. 最先应用与MicroSoftware Vi ...

  7. 粗谈pragma once与 #ifndef的区别

    #ifnde不受编译器的任何限制: #pragma once不受一些较老的编译器支持,兼容性不够好

  8. #pragma once和#ifndef指令总结

    在C/C++中,在使用预编译指令#include的时候,为了防止重复引用造成二义性(个人觉得这里二义性提的有点问题,觉得下面的补充可能理解好一些,有更好的解释可以帮我解答下哦.),通常有两种方式-- ...

  9. #pragma once 和 #ifndef ... #define ... #endif 的区别【转载】

    在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. 1. #pragma message 指令 message能够在编译消息输出窗口中输出相应的消 ...

最新文章

  1. mxnet中ndarray*ndarray用来作为掩码进行与运算的用法
  2. html5插件教程,HTML5教程 | HTML5 time元素
  3. BGP MPLS中MCE技术介绍
  4. matlab仿真随机数的产生
  5. CSP-S 2021 退役记
  6. python+selenium之自动生成excle,保存到指定的目录下
  7. 计算机复试上机辅导班,软件工程考研辅导班:考研院校2020年计算机/软件工程复试经验总结...
  8. MySQL 面试必备 8 个知识点
  9. python数值运算操作符也叫做内置操作符_Python的操作符 - osc_r1gtal48的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 联想p720装系统_教你装系统第六节(装系统需要注意那些?)
  11. vb.net SpeechLib 播报语音封装类
  12. 关于redis (error) CLUSTERDOWN Hash slot not served
  13. 如何将Ant Design Icon本地化
  14. 极路由3HC5861刷openwrt
  15. ZigBee无线温度传感网络设计
  16. RxSwift--RxSwift简介
  17. 如何在Keil uVision5建立飞思卡尔K60开发板的工程
  18. 用3DS MAX和PHOTOSHOP制作机器人----作者: Egbert Tjong 来源: 火星时代
  19. 【2013最新XP系统下载】木叶 GhostXP SP3 装机版_2013.09
  20. 正点原子I.MX6ULL核心板火热售卖中,提供丰富文档资料,工业级与商业级两种版本可选.

热门文章

  1. Python接口测试之requests
  2. php session操作类,操作Session的PHP类
  3. java简单小程序_Java简易登录注册小程序
  4. 【杂谈】来自一个懵懂青年的表白!
  5. java正则过滤特殊字符
  6. Redis java使用
  7. 7.3.7 - 并发多线程 死锁和递归锁
  8. python图像插值
  9. c#之Redis实践list,hashtable
  10. Vulkan Tutorial 14 Integration pipeline