电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

c 预处理

7页
  • 卖家[上传人]:小**
  • 文档编号:89123038
  • 上传时间:2019-05-18
  • 文档格式:DOC
  • 文档大小:21.50KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、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#includemyheader.h前者用来引用标准库头文件,后者常用来引用自定义的头文件前者编译器只搜索包含标准库头文件的默认目录,后者首先搜索正在编译的源文件所在的目录,找不到时再搜索包含标准库头文件的默认目录.如果把头文件放在其他目录下,为了查找到它,必须在双引号中指定从源文件到头文件的完整路径3)#define定义符号、宏

      2、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

      3、(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就会递增两次,这种情况下()是没

      4、什么用的如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)给替换变量加引号#defineMYSTRIloveyoucoutMYSTR;/Iloveyou而不是Iloveyou如果coutMYSTR;/则会输出MYSTR而不是Iloveyou可以这样做cout#MYSTR;/则会输出Iloveyou即coutIloveyou;2)在宏表达式中连接几个参数如#definejoin(a,b)ab这样不会理解为参数a的值与参数b的值的连接,即如join(10,999)不会理解为10999而是把ab理解为字符串,即输出ab这时可以#definejoi

      5、n(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因为有换行符所

      6、以上句等价于#defineVERSION3由此可以看出#defineCOMPARE_H与namespacecompare是独立没有关系的两个行也可以这样用#ifdefinedblock1&definedblock2#endif#ifCPU=PENTIUM4#endif#ifLANGUAGE=ENGLISH#defineGreetingGoodMorning.#elifLANGUAGE=GERMAN#defineGreetingGutenTag.#elifLANGUAGE=FRENCH#defineGreetingBonjour.#else#defineGreetingHi.#endifstd:coutGreetingstd:endl;#ifVERSION=3#elifVERSION=4#else#endif5)标准的预处理器宏_LINE_当前源文件中的代码行号,十进制整数_FILE_源文件的名称,字符串字面量_DATE_源文件的处理日期,字符串字面量,格式mmmddyyyy其中mmm是月份如Jan、Feb等dd是01-31yyyy是四位的年份_TIME_源文件的编译时间,也是字符串字面

      7、量格式是hh:mm:ss_STDC_这取决于实现方式,如果编译器选项设置为编译标准的C代码,通常就定义它,否则就不定义它_cplusplus在编译C+程序时,它就定义为199711L使用#line可以修改_FILE_返回的字符串如#line1000把当前行号设置为1000#line1000theprogramfile修改_FILE_返回的字符串行号改为了1000,文件名改为了theprogramfile#line_LINE_theprogramfile修改_FILE_返回的字符串行号没变,文件名改为了theprogramfilecoutprogramlastcompliedat_TIME_on_DATE_endl;6)#error在预处理阶段,如果出现了错误,则#error指令可以生成一个诊断消息,并显示为一个编译错误,同时中止编译#ifndef_cplusplus#errorError-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+)coutx=xy=yendl;assert(xy);/当x=y与x=5时,就报错,并终止程序的执行return0;

      《c 预处理》由会员小**分享,可在线阅读,更多相关《c 预处理》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.