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

 更新时间:2017年04月20日 16:35:28   投稿:lqh  
这篇文章主要介绍了C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别的相关资料,需要的朋友可以参考下

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

pragma once 之前一直用的很好,今天和同事的配合中发现自己没有真正理解pragma once。

原因:同事喜欢把公共的头文件通过生成后事件复制到一个公共的include文件夹中。

摘抄:

#ifndef方式:   
#ifndef __SOMEFILE_H__   
#define __SOMEFILE_H__  1   ... ... // 一些声明语句   
#endif  

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

#pragma方式 

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

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

总结: 1. #ifndef 由语言支持所以移植性好,#pragma 可以避免名字冲突

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Qt 仪表盘的实现示例

    Qt 仪表盘的实现示例

    仪表盘在很多汽车和物联网相关的系统中很常用,本文就来介绍一下Qt 仪表盘的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • C++数据结构之实现邻接表

    C++数据结构之实现邻接表

    这篇文章主要为大家详细介绍了C++数据结构之实现邻接表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C语言中的文件操作详解

    C语言中的文件操作详解

    这篇文章主要介绍了C语言中的文件操作详解,使用文件可以将数据直接存放到电脑的硬盘上,做到了数据的持久化
    2022-07-07
  • C语言修炼之路初识分支句 循环助本心下篇

    C语言修炼之路初识分支句 循环助本心下篇

    现实生活中我们经常需要根据不同的条件做出不同的选择。程序设计中也需要根据条件来选择不同的程序进行处理,这称之为分支结构,当条件表达式不存在时,它被假设为真。您也可以设置一个初始值和增量表达式,一般情况下,C 程序员偏向于使用 for(;;) 结构来表示一个无限循环
    2022-03-03
  • 浅谈十进制小数和二进制小数之间的转换

    浅谈十进制小数和二进制小数之间的转换

    下面小编就为大家带来一篇浅谈十进制小数和二进制小数之间的转换。小编觉得挺不错的现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C语言中二级指针的实例详解

    C语言中二级指针的实例详解

    这篇文章主要介绍了C语言中二级指针的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握理解二级指针的知识,需要的朋友可以参考下
    2017-10-10
  • c++异常处理机制示例及详细讲解

    c++异常处理机制示例及详细讲解

    本篇文章主要是对c++异常处理机制示例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • c++如何控制输出浮点数小数点后若干位

    c++如何控制输出浮点数小数点后若干位

    这篇文章主要介绍了c++如何控制输出浮点数小数点后若干位问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 基于Qt OpenCV的图像灰度化像素操作详解

    基于Qt OpenCV的图像灰度化像素操作详解

    这篇文章主要为大家详细介绍了基于Qt+OpenCV的图像灰度化像素操作:最大值法、平均法、加权平均值法,感兴趣的小伙伴可以了解一下
    2022-07-07
  • 获取C++变量类型的简单方法

    获取C++变量类型的简单方法

    这篇文章主要介绍了获取C++变量类型的简单方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论