- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
编译预处理C语言程序设计
目录content宏定义1文件包含2条件编译3其他编译预处理4
10.1宏定义在C语言源程序中允许用一个标识符来表示一个字符串,成为“宏”。宏定义是由源程序中的宏命令完成的,其一般格式如下:#define是宏定义命令,一个#define只能定义一个宏。若需要定义多个宏,就需要使用多个#define命令。被定义为“宏”的标识符称为“宏名”;字符串成为“宏体”,可以是常量、关键字、语句、表达式或者空白等。在预编译处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去替换,成为“宏替换”或“宏展开”。宏替换由预处理程序自动完成的。在C语言中,“宏”分为有参数和无参数两种,下面分别讨论这两种“宏”的定义与调用#define标识符字符串
10.1.1不带参数的宏宏名后不带参数时,表示用一个指定的标识符来代表一个字符串,也就是定义符号常量。例如,下面定义了两个无参数宏:这两个宏定义将符号常量TRUE定义为1,FALSE定义为0。接下来以一个例子来更加详细的进行说明。#defineTRUE1#defineFLASE0if(x==TRUE)printf(“TRUE”);elseif(x==FALSE)printf(“FALSE”);if(x==1)printf(“TRUE”);elseif(x==0)printf(“FALSE”);双引号中的TRUE和FALSE不被替换,符号常量出现在双引号中时,将失去定义过的含义,而仅仅作为一般字符串使用。例子:在进行了预编译处理后,程序中的符号常量被定义它们的常量替换
10.1.1不带参数的宏在宏定义语句中,可以使用已经定义过的宏,即允许宏的嵌套#defineR3#definePI3.14159#defineL2*PI*R宏嵌套:宏定义应用:1、使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量,而且简单不易出错,容易记忆。2、当需要改变某一个常量时,只要改变#define命令行,做到一改全改。
10.1.2带参数的宏C语言允许宏带有参数。在宏定义中的参数称为形参,在宏调用中的参数叫做实参。在调用带参数的宏时,不仅要进行宏替换,而且要用实参去替换形参。带参数的宏的定义一般形式为:调用带参数的宏的一般形式为:#define宏名(形参表)字符串宏名(实参表)#includestdio.h#defineMAX(x,y)((xy)?x:y)voidmain(){inta,b;a=6;b=9;printf(“Maxnumberis%d,MAX(a,b));}例10.1带参数的宏带参数的宏定义运行结果:Maxnumberis9调用带参数的宏
10.1.2带参数的宏1、函数调用时,先求出实参表达式的值,然后带入形参,而使用带参数的宏,则只是进行简单的字符替换,不进行计算。2、函数调用时在程序运行时处理的,需要分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,也不进行值传递处理,也没有“返回值”的概念。3、对函数中的实参和形参都要定义类型,二者的类型要求一致,如果不一致,则应进行类型转换;而宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符即可。宏定义时,字符串可以是任何类型的数据。带参数的宏与函数的区别:
10.1.2带参数的宏4、调用函数值可能得到一个返回值,而用宏可以设法得到几个结果。例如,如下宏定义语句:当调用这个宏时,可以得到三个结果。5、使用宏次数多时,宏展开后源程序增长;而函数调用不会是源程序变长。6、宏替换不占运行时间,只占编译时间;而函数调用则占用运行时间。带参数的宏与函数的区别:#defineCIRCLE(R,L,S,V)L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*R
10.1.3使用宏定义时应注意问题1、宏名一般习惯上使用大写字母表示,以与变量名相区别。2、宏定义用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的替换,预处理程序对它不做任何检查。如果有错误,只能在编译已将宏展开后的源程序中发现。3、宏定义不是说明或语句,在行末不必加分号,如果加上分号,则连分号
您可能关注的文档
最近下载
- WA6515塔吊性能说明书-WA6515-10B 操作手册.pdf VIP
- Q_ZFZY 0028S-2019蜂胶乙醇提取物.pdf
- 2025年蛇年元旦幼儿园庆典新年联欢晚会活动主题班会PPT模板5.pptx
- 国开(山东)51704-生活方式与常见疾病预防-期末终结性考核试题-100分答案.doc
- 2023-2024学年北京市东城区七年级上学期期末考试语文试卷 含答案.pdf VIP
- 新准则主要变化.pptx
- 古典诗词鉴赏学习通超星期末考试答案章节答案2024年.docx
- 2024年秋季新人教版七年级上册英语全册教案.docx
- 必威体育精装版国际货物运输与保险复习题内附答案.docx VIP
- 医院2023年第二次药事管理委员会会议记录五篇.docx VIP
文档评论(0)