电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

c 预处理

  • 资源ID:89123038       资源大小:21.50KB        全文页数:7页
  • 资源格式: DOC        下载积分:12金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要12金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

c 预处理

C 预处理C+预处理2010-03-3018:471)常用的预处理:#include包含头文件#if条件#else否则#elif否则如果#endif结束条件#ifdef或#ifdefined如果定义了一个符号,就执行操作#ifndef或#if!defined如果没有定义一个符号,就指执行操作#define定义一个符号#undef删除一个符号#line重新定义当前行号和文件名#error输出编译错误消息,停止编译#pragma提供机器专用的特性,同时保证与C+的完全兼容2)#include在程序中包含头文件头文件通常以.h结尾,其内容可使用#include预处理器指令包含到程序中头文件中一般包含:函数原型与全局变量形式常有下面两种#includeiostream#include"myheader.h"前者用来引用标准库头文件,后者""常用来引用自定义的头文件前者编译器只搜索包含标准库头文件的默认目录,后者首先搜索正在编译的源文件所在的目录,找不到时再搜索包含标准库头文件的默认目录.如果把头文件放在其他目录下,为了查找到它,必须在双引号中指定从源文件到头文件的完整路径3)#define定义符号、宏1符号#definePI3.1415925定义符号PI为3.1415925#definePI取消PI的值这里PI看起来像一个变量,但它与变量没有任何关系,它只是一个符号或标志,在程序代码编译前,此符号会用一组指定的字符来代替3.14159265不是一个数值,只是一个字符串,不会进行检查在编译前,预处理器会遍历代码,在它认为置换有意义的地方,用字符串PI的定义值(3.14159265)来代替在注释或字符串中的PI不进行替换在C中常以#define来定义符号常量,但在C+中最好使用const来定义常量#definePI3.14159265constlongdoublePI=3.14159265;两者比较下,前者没有类型的指定容易引起不必须的麻烦,而后者定义清楚,所以在C+中推荐使用const来定义常量#define的缺点:1)不支持类型检查2)不考虑作用域3)符号名不能限制在一个命名空间中2#undef删除#define定义的符号#definePI3.14159265./之间所有的PI都可以被替换为3.14159265#undefPI之后不再有PI这个标识符3定义宏#definePrint(Var)count(Var)endl用宏名中的参数带入语句中的参数宏后面没有;号Print(Var)中的Print和(之间不能有空格,否则(就会被解释为置换字符串的一部分#definePrint(Var,digits)countsetw(digits)(Var)endl调用Print(ival,15)预处理器就会把它换成coutsetw(15)(ival)endl;所有的情况下都可以使用内联函数来代替宏,这样可以增强类型的检查templateclassTinlinevoidPrint(constT&var,constint&digits)countsetw(digits)varendl;调用Print(ival,15);使用宏时应注意的易引起的错误:#definemax(x,y)xy?x:y;+调用result=max(myval,99);则换成result=myval99?myval:99;这个没有问题是正确的调用result=max(myval+,99);则换成result=myval+99?myval+:99;这样如果myval99那么myval就会递增两次,这种情况下()是没什么用的如result=max(x),y)则result=(myval+)99?(myval+):99;再如#defineproduct(m,n)m*n调用result=product(5+1,6);则替换为result=5+1*6;所以产生了错误的结果,此时应使用()把参数括起#defineproduct(m,n)(m)*(n)则result=product(5+1,6);则替换为result=(5+1)*(6);所以产生了错误的结果,此时应使用()把参数括起结论:一般用内联函数来代替预处理器宏技巧:1)给替换变量加引号#defineMYSTR"Iloveyou"coutMYSTR;/Iloveyou而不是"Iloveyou"如果cout"MYSTR"/则会输出"MYSTR"而不是"Iloveyou"可以这样做cout#MYSTR;/则会输出"Iloveyou"即cout""Iloveyou""2)在宏表达式中连接几个参数如#definejoin(a,b)ab这样不会理解为参数a的值与参数b的值的连接,即如join(10,999)不会理解为10999而是把ab理解为字符串,即输出ab这时可以#definejoin(a,b)a#b则join(10,999)就会输出109993)逻辑预处理器指令#ifdefinedCALCAVERAGE或#ifdefCALCAVERAGEintcount=sizeof(data)/sizeof(data0);for(inti=0;icount;i+)average+=data;average/=count;#endif如果已经定义符号CALCAVERAGE则把#if与#endif间的语句放在要编译的源代码内防止重复引入某些头文件#ifndefCOMPARE_H#defineCOMPARE_H注意:这里只是定义一个没有值的符号COMPARE_H,下面的namespacecompare不是COMPARE_H的内容,这里的定义不像是定义一个常量或宏,仅仅定义一个符号,指出此符号已定义,则就会有下面的内容namespacecompare.namespacecomparedoublemax(constdouble*data,intsize);doublemin(constdouble*data,intsize);#endif比较#defineVERSION3因为有换行符所以上句等价于#defineVERSION3由此可以看出#defineCOMPARE_H与namespacecompare是独立没有关系的两个行也可以这样用#ifdefinedblock1&&definedblock2#endif#ifCPU=PENTIUM4#endif#ifLANGUAGE=ENGLISH#defineGreeting"GoodMorning."#elifLANGUAGE=GERMAN#defineGreeting"GutenTag."#elifLANGUAGE=FRENCH#defineGreeting"Bonjour."#else#defineGreeting"Hi."#endifstd:coutGreetingstd:endl;#ifVERSION=3#elifVERSION=4#else#endif5)标准的预处理器宏_LINE_当前源文件中的代码行号,十进制整数_FILE_源文件的名称,字符串字面量_DATE_源文件的处理日期,字符串字面量,格式mmmddyyyy其中mmm是月份如Jan、Feb等dd是01-31yyyy是四位的年份_TIME_源文件的编译时间,也是字符串字面量格式是hh:mm:ss_STDC_这取决于实现方式,如果编译器选项设置为编译标准的C代码,通常就定义它,否则就不定义它_cplusplus在编译C+程序时,它就定义为199711L使用#line可以修改_FILE_返回的字符串如#line1000把当前行号设置为1000#line1000"theprogramfile"修改_FILE_返回的字符串行号改为了1000,文件名改为了"theprogramfile"#line_LINE_"theprogramfile"修改_FILE_返回的字符串行号没变,文件名改为了"theprogramfile"cout"programlastcompliedat"_TIME_"on"_DATE_endl;6)#error在预处理阶段,如果出现了错误,则#error指令可以生成一个诊断消息,并显示为一个编译错误,同时中止编译#ifndef_cplusplus#error"Error-ShouldbeC+"#endif7)#pragma专门用于实现预先定义好的选项,其结果在编译器说明文档中进行了详细的解释。编译器未识别出来的#pragma指令都会被忽略8)assert()宏在标准库头文件cassert中声明用于在程序中测试一个逻辑表达式,如果逻辑表达式为false,则assert()会终止程序,并显示诊断消息用于在条件不满足就会出现重大错误,所以应确保后面的语句不应再继续执行,所以它的应用非常灵活注意:assert不是错误处理机制,逻辑表达式的结果不应产生负面效果,也不应超出程序员的控制(如找开一个文件是否成功),程序应提供适当的代码来处理这种情况assert(expression);assert(expression)&&assert(expression2);可以使用#defineNDEBUG来关闭断言机制#includeiostream#includecassertusingstd:cout;usingstd:endl;intmain()intx=0;inty=0;coutendl;for(x=0;x20;x+)cout"x="x"y="yendl;assert(xy);/当x=y与x=5时,就报错,并终止程序的执行return0;

注意事项

本文(c 预处理)为本站会员(小**)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.