- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 编译预处理 第八章 编译预处理 编译预处理:在源程序文件中,加入“编译预处理命令”。使编译程序在对源程序进行通常的编译之前,先对这些特殊的命令进行“预处理”,然后将预处理的结果和源程序一起再进行通常的编译处理,以得到目标代码(.obj文件)。 所有编译预处理命令都是以“#”打头,单独占源程序中的一行,一般放在源程序的首部。 合理地使用预处理功能编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。 第八章 编译预处理 第八章 编译预处理 8.1 宏定义 8.2 文件包含 8.3 条件编译 8.1 宏定义 宏定义的作用是用标识符来代表一串字符。 一旦进行了宏定义,在程序中就可以用相应的标识符 代表该串字符。 C编译系统在编译之前将程序中的标识符替换成字符 串,这称为宏展开。 宏定义是由源程序中的宏定义命令来完成的。宏展开 是由预处理程序自动完成的。 8.1 宏定义 8.1 宏定义 8.1 宏定义 说明: 1)宏名要符合标识符的命名规则,通常采用大写。 2)宏定义使用宏名代替一个字符串,只是做简单的置换,并不做正确性检查。只有宏展开后,程序进行编译时才进行语法检查。 3)宏定义不是C语句,在行尾不用加分号。如果加了分号,会将分号看成字符串的一部分,一起置换。 8.1 宏定义 4)宏定义语句出现在程序中函数的外面,宏名的有效范围为宏定义命令之后到源文件结束。可以使用#undef命令来提前终止宏名的作用域。例如:PI的有效范围 #define PI 3.14159 main() { ……} #undef PI del() {……} #undef PI的功能是使PI的作用范围到这一行结束,因此在del函数中PI就不能再代表3.14159了。 8.1 宏定义 5)宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。 例如: #define MIN 100 main() { printf(MIN=%d,MIN); } 前面的MIN在引号里面,不替换,后面的MIN要替换,所以输出结果为:MIN=100 8.1 宏定义 8.1 宏定义 例如: #define L(a,b) 2*(a+b); 宏定义,其中的a、b是形参 length=L(2,3); 宏调用,其中的2、3是实参 length=2*(2+3); 带参宏定义的宏展开:按#define语句中指定的字符串 从左到右替换。如果字符串中包含宏中指定的形参 (如a、b),则将程序语句中相应的实参(2、3)值 传递过去。如果宏定义中的字符串中的字符不是参数 字符(如2*(a+b)中的2、*、+等),则保留。 8.1 宏定义 【例8-2】 带参宏定义的应用示例。 #define PI 3.14159 #define L(r) 2*PI*r main() { float a,length; a=5.5; length=L(a); /*宏展开为:2*3.14159*5.5*/ printf(r=%.2f\nlength=%.2f\n,a,length); } 8.1 宏定义 说明: 1)带参宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。 例1:宏定义:#define S(a,b) a*b 宏调用:c=S(2+3,3+4) 宏展开后的语句:c=2+3*3+4 最终c的值为15 例2:宏定义:#define S(a,b) (a)*(b) 宏调用:c=S(2+3,3+4) 宏展开后的语句:c=(2+3)*(3+4) 最终c的值为35 8.1 宏定义 2)宏定义时,在宏名与参数的括号之间不应加空格,否则将空格以后的字符都作为字符串的一部分。 #define L (r) 2*PI*r L是宏名,而替代的字符串是 (r) 2*PI*r。 3) 在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值,要用它们去替换形参(只是符号替换),因此必须作类型说明。 8.2 文件包含 文件包含是指一个源文件可以将另外一个源文件的全 部内容包含进来,即将另外的文件包含到本文件之中。 一般形式: #include 文件名 或:#include 文件名 8.2 文件包含 说明: 1)在include命令中,如果文件名用双引号括起来,就先在源程序所在的位置(即当前目录)查找该文件,若找不到,再到存放库函数头文件所在的目录中去查找。 如果文件名用尖括号括起来,就直接到存放库函数头文件所在的目录中寻找要包含的文
您可能关注的文档
- C语言程序设计(第二版) 教学课件 作者 刘加海 朱云其第五章 第五章.ppt
- C语言程序设计(第二版) 教学课件 作者 刘加海 朱云其第一章 第一章.ppt
- C语言程序设计(第二版) 教学课件 作者 刘克成 张凌晓 ch1.ppt
- C语言程序设计(第二版) 教学课件 作者 刘克成 张凌晓 ch2.ppt
- C语言程序设计(第二版) 教学课件 作者 刘克成 张凌晓 ch3.ppt
- C语言程序设计(第二版) 教学课件 作者 刘克成 张凌晓 ch4.ppt
- C语言程序设计(第二版) 教学课件 作者 刘克成 张凌晓 ch5.ppt
- C语言程序设计(第二版) 教学课件 作者 刘克成 张凌晓 ch6.ppt
- C语言程序设计(第二版) 教学课件 作者 刘克成 张凌晓 ch7.ppt
- C语言程序设计(第二版) 教学课件 作者 刘克成 张凌晓 ch8.ppt
- 2025至2030年极细微粒钨钢R角端铣刀项目投资价值分析报告.docx
- 2025至2030年柴油烘炉项目商业计划书.docx
- 2025至2030年标准六角头螺栓项目商业计划书.docx
- 2025至2030年树脂烟缸项目商业计划书.docx
- 2025至2030年梅花丝项目商业计划书.docx
- 2025至2030年智能直行程电动执行机构项目投资价值分析报告.docx
- 2025至2030年有创动脉压力监测传感器系统项目商业计划书.docx
- 2025至2030年木柄美式石工锤项目商业计划书.docx
- 2025至2030年旋转式剥线器项目商业计划书.docx
- 2025至2030年智能型IC卡燃气表项目商业计划书.docx
最近下载
- 铁路局招聘考试《铁路基础知识》100题及答案.docx
- 《QSY1237-2009-工艺和设备变更管理》.pdf
- 期末复习专项训练【实验题】(试题)小学科学五年级上册 教科版.docx VIP
- 农旅融合:推进乡村振兴,实现双赢.docx VIP
- 技术标书技术方案(完整资料).pdf VIP
- 13G311-1:混凝土结构加固构造.pdf VIP
- DB21_T 1565-2015预应力混凝土管桩基础技术规程.pdf
- 夏季防暑降温施工方案_夏季防暑降温施工方案夏季防暑降温工作方案.pdf VIP
- 危重症患者口渴的护理PPT.pptx
- 八年级人教版物理下《12.2滑轮》一等奖优秀教学设计 .pdf VIP
文档评论(0)