2019独角兽企业重金招聘Python工程师标准>>>

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

1   #ifndef方式
2   #pragma once方式

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

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

方式二:

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

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

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

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

转载于:https://my.oschina.net/tonyyang/blog/34673

#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. c/c++ 避免重复包含 pragma once 和 #ifndef 的区别

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

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

    http://www.cppblog.com/szhoftuncun/archive/2007/10/28/35356.html 为了避免同一个文件被include多次 1   #ifndef方式 2 ...

  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. Consultanting Service
  2. php代码审计工具_【学习笔记】PHP代码审计入门:代码审计实例2
  3. Ubuntu开机后一直循环登录,却进不去桌面
  4. Sonar问题解决:普通方法调用静态属性
  5. IIS7整合Tomcat6
  6. linux vscode设置在集成终端中打开
  7. c++学习笔记之异常
  8. 哎,最近心情非常烦乱!
  9. ESP32使用Arduino环境,安装、编译、下载、安装库
  10. linux命令增删改查,hw_linux_study_day003,Linux系统终端中的增删改查命令
  11. 大数据开发:数据仓库分层设计
  12. KEIL STC 仿真
  13. win系统安装夜神模拟器、夜神模拟器链接到HbuilderX
  14. 再看健康码和随申码,对比健康码和身份证,想想延展
  15. 【算法】-8大排序算法总结-Python
  16. ipsec-tools之racoon搭建
  17. H5播放B站源的flv视频
  18. 使用proteus仿真验证基尔霍夫定律
  19. svn设置文件提交过滤
  20. Unity3D Behavior Designer 行为树1 认识

热门文章

  1. APUE(第八章)进程控制
  2. Nginx 五大常见应用场景,Linux运维请收藏~
  3. Mac OS增删环境变量
  4. python selenium 处理弹窗_python selenium 弹出框处理的实现
  5. 30个实用的Python脚本(请收藏)
  6. 常用的 分布式事务 都有哪些?我该用哪个?
  7. 我国在计算机科学领域故事,我国巨型计算机领域的一代天骄
  8. 单片机简单的计算器c语言程序,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...
  9. win2012服务器硬盘分区,Windows Server 2008/2012更改磁盘分区大小教程
  10. 万能门店小程序_门店小程序起名如何快速引流?