#pragama once 的作用

pragma once 的作用


#pragma once 是一个比较常用的 C/C++ 预处理指令,只要在头文件的最开始加入这条预处理指令,就能够保证头文件只被编译一次。
#pragma once 是与编译器相关的,有的编译器支持,有的编译器不支持,具体情况要看编译器 API 文档,不过现在大部分编译器都支持;

防止头文件被多次编译的方式还有:#ifndef、#define、#endif,它们是 C/C++ 语言中的宏定义,在所以支持 C/C++ 语言的编译器上都是有效的。如果要写跨平台程序,最好使用这种形式;以下是使用两种形式的方式

// 方式一
#ifndef __HEADER_H_
#define __HEADER_H_
...    // 需要声明的语句
#endif

// 方式二
#pragma once
...    // 需要声明的语句

两种方式的区别


  • #ifndef 的方式依赖于 宏名 不能冲突,可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被同时包含。缺点就是如果不同头文件的 宏名 相同,会导致头文件明明存在,编译器却说找不到声明的状况;
  • #pragma once 则由编译器提供保证:同一个文件不会被编译多次。优点是:不必担心两个文件是否宏名相同。缺点是:如果存在多份相同的头文件,会被重复包含。相比宏名碰撞引发的 “找不到声明” 的问题,重复包含更容易被发现并修正;
  • #ifdef 由语言支持所以移植性好,#pragma once 可以避免名字冲突;

#pragma once 方式产生于 #ifndef 之后,因此很多人可能甚至没有听说过。目前看来 #ifndef 更受到推崇。因为 #ifndef 受语言天生的支持,不受编译器的任何限制;而 #pragma once 方式却不受一些较老版本的编译器支持,换言之,它的兼容性不够好。也许,再过几年等旧的编译器死绝了,这就不是什么问题了.


参考


  1. 参考《百度百科》;
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值