下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 pragma once vs ifndef

pragma once vs ifndef.doc

pragma once vs ifndef

shi金芝
2017-09-27 0人阅读 举报 0 0 暂无简介

简介:本文档为《pragma once vs ifndefdoc》,可适用于综合领域

pragmaoncevsifndef#pragmaonce#pragmaonce这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次#pragmaonce用来防止某个头文件被多次include#ifndef#define#endif用来防止某个宏被多次定义。#pragmaonce是编译相关就是说这个编译系统上能用但在其他编译系统不一定可以也就是说移植性差不过现在基本上已经是每个编译器都有这个定义了。#ifndef#define#endif这个是C语言相关这是C语言中的宏定义通过宏定义避免文件多次编译。所以在所有支持C语言的编译器上都是有效的如果写的程序要跨平台最好使用这种方式#pragma语言符号字符串是给出特有编译器指令和参量的字符序列。数字符号(#)必须是包含编译指示行中的第一个非空白字符。空白字符可分开数字符号(#)和单词pragma•。作用:为了避免同一个文件被include多次#ifndef方式#pragmaonce方式在能够支持这两种方式的编译器上二者并没有太大的区别但是两者仍然还是有一些细微的区别。方式一:#ifndefSOMEFILEH#defineSOMEFILEH一些声明语句#endif方式二:#pragmaonce一些声明语句#ifndef的方式依赖于宏名字不能冲突这不光可以保证同一个文件不会被包含多次也能保证内容完全相同的两个文件不会被不小心同时包含。当然缺点就是如果不同头文件的宏名不小心“撞车”可能就会导致头文件明明存在编译器却硬说找不到声明的状况#pragmaonce则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件而不是指内容相同的两个文件。带来的好处是你不必再费劲想个宏名了当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝本方法不能保证他们不被重复包含。当然相比宏名碰撞引发的“找不到声明”的问题重复包含更容易被发现并修正。方式一由语言支持所以移植性好方式二可以避免名字冲突#pragmaonce方式产生于#ifndef之后因此很多人可能甚至没有听说过。目前看来#ifndef更受到推崇。因为#ifndef受语言天生的支持不受编译器的任何限制而#pragmaonce方式却不受一些较老版本的编译器支持换言之它的兼容性不够好。也许再过几年等旧的编译器死绝了这就不是什么问题了。我还看到一种用法是把两者放在一起的:#pragmaonce#ifndefSOMEFILEH#defineSOMEFILEH一些声明语句#endif看起来似乎是想兼有两者的优点。不过只要使用了#ifndef就会有宏名冲突的危险所以混用两种方法似乎不能带来更多的好处倒是会让一些不熟悉的人感到困惑。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/3

pragma once vs ifndef

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利