已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第15章编译预处理,15.1概述15.2宏定义15.3文件包含15.4条件编译,15.1概述,预处理功能由预处理命令组成,这些命令在进行编译功能(包括词法分析、语法分析、代码生成和优化等)之前进行处理,故称为“编译预处理”。预处理后的程序再进行编译、连接,最后形成计算机可以执行的机器语言程序。,C语言提供的编译预处理功能有以下3种:(1)宏定义;(2)文件包含;(3)条件编译。这些功能分别用宏定义命令、文件包含命令、条件编译命令来实现。这些预处理命令不属于C语言中真正的语句,为了与一般C语言语句相区别,形式上都以“#”开头,预处理命令后面也不加分号。,15.2宏定义,15.2.1不带参数的宏定义1不带参数的宏定义不带参数的宏定义的一般定义形式如下:#define标识符字符序列,例15.1输入半径,求圆的周长、面积和体积。#definePI3.1415926main()floatl,s,r,v;printf(inputradius:);scanf(f,2终止宏定义命令终止宏定义命令的一般形式如下:#undef标识符undef是终止宏定义的特定字,其作用是从该命令开始,该标识符(宏名)不再代表相应的字符序列,即该标识符的作用范围到此处结束。,例如,以下程序段:#defineP100main()intaP,b,c;#undefP/*取消宏P,在以下的函数中P不再代表100*/intsum(intx,intn),例15.2输出格式定义为宏的示例。#definePRprintf#defineNLn#defineMACROd#defineMACRO1MACRONL#defineMACRO2MACROMACRONL#defineMACRO3MACROMACROMACRONL#defineMACRO4MACROMACROMACROMACRONL#defineSsmain()inta,b,c,d;charstring=CHINA;a=1;b=2;c=3;d=4;PR(MACRO1,a);PR(MACRO2,a,b);PR(MACRO3,a,b,c);PR(MACRO4,a,b,c,d);PR(S,string);,程序运行结果为:1121231234CHINA,15.2.2带参数的宏定义带参数的宏定义的一般形式如下:#define宏名(形参表)字符序列形参表由一个或多个参数组成,参数之间用逗号进行分隔。字符序列中应该包含有形参表所指定的参数。在编译预处理时,带参数的宏调用在展开时,不是进行简单的字符序列替换,而是进行实参到形参的替换。实参为程序中引用宏名的参数。带参数的宏定义进一步扩充了宏定义的功能。,例15.3有以下程序:#definePI3.1415926#defineS(r)PI*r*rmain()floata,area;a=3.6;area=S(a);printf(r=fnarea=fn,a,area);,例15.4下面程序是把简单表达式用宏定义的方法实现的示例。#definePI3.1415926#defineCIRCLE(R,L,S,V)L=2*PI*R;S=PI*R*R;V=4.0/3*PI*R*R*Rmain()floatr,l,s,v;/*半径、圆周长、圆面积、球体积*/scanf(r=f,该程序把求解圆的周长、面积和体积的表达式用宏来代替。在预处理阶段宏调用:CIRCLE(r,l,s,v)被展开为:l=2*3.1415926*r;s=3.1415926*r*r;v=4.0/3*3.1415926*r*r*r。,15.3文件包含,文件包含是指在一个文件中包含另外一个文件的内容。文件包含命令的一般格式:#include文件名或#include其中include是文件包含的特定字。预处理时,该命令把“文件名”指定的文件内容复制到本文件中该命令处,替代该条命令,编译阶段再对合并后的文件进行编译。文件名要使用全名,包括路径名和扩展名。,15.4条件编译,1#ifdef条件编译命令#ifdef条件编译的一般格式为:#ifdef标识符程序段1#else程序段2#endif其中标识符是用define命令定义的,该条件编译命令的作用是:若所指定的标识符已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2,#else部分可以没有。,例如程序调试信息的显示为:#defineDEBUG#ifdefDEBUGprintf(x=d,y=d,z=dn,x,y,z);#endif,2#ifndef条件编译命令#ifndef条件编译的一般格式为:#ifndef标识符程序段1#else程序段2#endif该命令的作用与#ifdef条件编译命令略有不同,若标识符未被定义过,则编译程序段1,否则编译程序段2。,3#if条件编译命令#if条件编译的一般格式为:#if表达式程序段1#else程序段2#endif该命令的作用是若表达式为真则编译程序段1,否则编译程序段2。,例15.5输入一行字母字符,根据需要设置条件编译,使之能将字母全改为大写输出,或全改为小写输出。程序如下:#d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高压电工证考试题库及答案
- 2025年机械工程师日常巡检安全防护装置标准试题附答案
- 2025年信息技术专业职业资格考试试题及答案
- 经济管理类介绍
- 2025年资料员试卷及答案
- 无创呼吸机护理宣教
- 2025年全国消防安全知识竞赛题库及答案(共80题)
- 2025乡村医生考试试题及答案
- 母乳喂养知识考试试卷及答案
- 华工综评笔试题目大全及答案
- 中医药行业合规管理制度
- 苗族银饰工艺传承-洞察及研究
- 2023年执业药师药学综合知识与技能考试模拟真题与答案解析
- 公司停送电电管理制度
- 老年护理考试题库及答案
- 《黑色三分钟 生死一瞬间》九部-十二部事故分类统计(合计60部)
- 2025年自学考试《00504艺术概论》考试复习题库(含答案)
- 环境整治工程 投标方案(技术标)
- 《聚酰亚胺》课件:一种耐高温高分子材料的深度解析
- 设备搬运就位合同协议
- 中国流体输送系统行业市场发展前景及发展趋势与投资战略研究报告(2024-2030)
评论
0/150
提交评论