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

上传资料

关闭

关闭

关闭

封号提示

内容

首页 #pragma once和#ifndef的区别

#pragma once和#ifndef的区别.doc

#pragma once和#ifndef的区别

wu立伟wu
2017-09-27 0人阅读 举报 0 0 暂无简介

简介:本文档为《#pragma once和#ifndef的区别doc》,可适用于高等教育领域

#pragmaonce和#ifndef的区别#pragmaonce和#ifndef的区别#pragmaonce和#ifndef的区别#pragmaonce和#ifdef都是可以避免同一个文件被include多次。在能够支持这两种方式的编译器上二者并没有太大的区别但是两者仍然还是有一些细微的区别。#pragmaonce方式这个是编译器相关就是说在这个编译系统上能用但是在其他编译系统不一定行也就是说移植型差。不过现在基本上已经是每个编译器都有这个定义了。编译器提供保证同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件而不是指内容相同的两个文件。于是不必再费劲想个宏名了当然也就可以避免宏的名字冲突问题了。缺点:如果某个头文件有多份拷贝本方法不能保证他们不被重复包含。看看VC自带的Stdargh头文件中是怎么使用#pragmaonce的毕竟微软的东西权威嘛||#ifMSCVER>#pragmaonce#endif#ifndefINCSTDARG#defineINCSTDARG#include<vadefsh>#definevastartcrtvastart#definevaargcrtvaarg#definevaendcrtvaend#endif*INCSTDARG*此时只需要注意以下三行代码:#ifMSCVER>#pragmaonce#endif其中MSCVER宏是由微软编译器指定的表示编译器的版本号。可以看到在宏MSCVER的值小于(VC==整理:老鬼骑士==#pragmaonce和#ifndef的区别)时它对#pragmaonce是不支持的。#ifndef方式这个是C语言相关这是C语言中的宏定义通过宏定义避免文件多次编译。所以在所有支持C语言的编译器上都是有效的。如果写的程序要跨平台最好使用这种方式。#ifndef由语言支持移植性好。它依赖于宏名字不能冲突这不光可以保证同一个文件不会被包含多次也能保证内容完全相同的两个文件不会被不小心同时包含。另外为了保证不同头文件中的宏名不冲突故采取类似于ABCH的取名方式。其中abch为当前头文件名。缺点:如果不同头文件的宏名不小心“撞车”可能就会导致头文件明明存在编译器却硬说找不到声明的状况。但这个缺点恰恰是我们可以利用的优点#ifndef方式可以通过前面介绍的特殊的宏的取名方式来避免名称冲突问题于是其缺点也就不复存在了进而#ifndef方式就更常用了。还看Stdargh头文件这个头文件里面不仅使用了#pragmaonce方式而且使用了#ifndef方式来保证该头文件不被多次include#ifndefINCSTDARG#defineINCSTDARG…………#endif*INCSTDARG*总结,性能上的区别使用#ifndef的话编译器每次看到#include这个文件都需要读入文件解析代码而使用#pragmaonce编译器根本不会重复打开文件大大提高了效率。,编码风格上的区别使用#pragmaonce的代码简洁重要的是它避免了头文件标号(如myheaderh)的重定义或者#endif包含范围错误的情况。,语意上的区别#pragmaonce是针对文件的它告诉编译器本文件只编译一次。==整理:老鬼骑士==#pragmaonce和#ifndef的区别#ifndef…#define…#endif只是针对文件中的某一个标号而言的它能防止三个指令间包含的内容的重复性处理。就这一点而言后者更灵活。可移植性方面#pragmaonce是微软的开发工具中所使用的如msvc等工具可以完好的支持#ifndef#define#endif是C标准里面的一部分对于任何完好支持cc的编译器都能使用。显而易见后者的可移植性更高。==整理:老鬼骑士==

用户评价(0)

关闭

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

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

提示

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

文档小程序码

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

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/4

#pragma once和#ifndef的区别

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利