版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第9章 编译预处理,主要内容,宏替换 文件包含 条件编译 预定义宏 运算符和,后三节为 自学内容,预处理命令:,所谓预处理,就是C编译程序对C源程序编译前由编译预处理程序对预处理命令进行处理的过程。 C语言中,以“”开头(如define)的语句统称为编译预处理命令。 这些命令必须在一行的开头以“”开始,末尾不加分号,以区别一般的C语句。,C语言的预处理命令,宏定义: #define , #undef 文件包含: #include,9.1 宏替换,不带参数的宏定义(即符号常量定义语句) #define 宏名 替换文本 编译时编译预处理程序自动对源程序中的“宏名”用“替换文本”来替换,即宏展开 例
2、如: #define LENGTH 300 #define PI 3.1415926,宏替换使用说明,(1)宏名一般用大写字母,以示与一般变量区别。 (2)使用宏替换的作用是提高程序的清晰性、可移植性。 (3) 宏定义是用宏名代替一个字符串,是简单的置换,并不作语法检查。 (4) 宏定义语句末尾不能加分号,否则会连分号一起置换。,(5) #define 命令出现在程序中函数的外面;宏名的有效范围为:定义宏命令之后到本源文件结束。 (6) 可以用undef命令终止宏定义的作用域。 (7) “替换文本”中可以包含已定义过的宏名。 (8)“替换文本”不能替换双引号中的字符串。 (9) 在同一个程序段
3、中,同一个宏名不能重复定义。,9.1.2 带参数的宏定义,一般形式: #define 宏名(参数表) 字符串 说明: “字符串”中包含“参数表”中所指定的参数。,【例】带参数的宏定义。,#define DB(x) (x)*2) main( ) double y; float z=10; y=DB(z); /* 等价于: y= z*2; */ printf(y=%fn,y); ,定义时,最好在字符串的形参外加一个()P191,【例】,#define abs(x) (x)0)?(x):(-(x) main( ) int a=-3,b; float c=-2.4,d; b=abs(a); d=abs
4、(c); printf(b=%d,d=%fn,b,d); ,区别函数和带参数的宏定义:,函数调用时,先求出实参表达式的值,再用这个值赋给形式参数;带参数的宏定义仅仅进行字符串的简单替换。 函数调用是在程序运行时分配临时内存单元;而宏展开是在编译时进行,展开时不分配内存单元,不进行值传递。 函数调用只占运行时间;宏替换只占编译时间。 宏替换后使源程序增长,函数调用不会。,写出下面程序的运行结果:,#define MIN(x,y) (x)(y)?(x):(y) main() int i=10,j=15,k; k=10*MIN(i,j); printf(“%dn”,k); ,答案:15,9.2 文件
5、包含,文件包含就是在一个文件中,包含另外一个文件的全部内容。 文件包含功能由include命令来实现。 include命令的一般形式: include “文件名” include 在一些版本的C语言中,还允许“文件名”中带路径。,#include “file2.c”,A,A,B,B,file1.c,file1.c,file2.c,包 含,文件包含示意图,( a ),( b ),说明:,被包含的文件常以“.h”(head)结尾,用在文件头部,被称为“标题文件”或“头部文件”,如 stdio.h。 其扩展名也可以为其它,如“.c”。 如果需要修改一些常数,不必修改每个程序,只需修改一个文件(头部文
6、件)即可。,【例9.8】include的使用。,#include #include main( ) float a,b; float c; scanf(%f%f, ,区别“文件名”和关于include的使用,include “文件名” 带双引号的文件名,系统将先在源程序所在的目录内查找指定的包含文件;如果找不到,再按照系统指定的标准方式到相关的目录中去寻找。 多用于包含用户文件,include 带尖括号的文件名,系统将直接按照指定的标准方式到相关的目录中去寻找。 多用于标准库函数,使用文件包含需注意:,一条文件包含命令只能包含一个文件。如果需要包含多个文件,就必须使用多条文件包含命令。 文件包
7、含的定义是可以嵌套的,即允许一个被包含的文件包含其它文件。 被包含文件与其所在的文件在预编译后成为同一个文件。,课堂练习:,1、以下叙述中不正确的是: (A)预处理命令行都必须以号开始 (B)C程序中凡是以开始的命令行都是预处理命令行 (C)C程序在执行过程中对预处理命令进行预处理 (D)以下是正确的宏定义 define IBM_PC,答案:C,2、在宏定义define PI 3.1415926 中,用宏名PI代替一个: (A)常量 (B)单精度数 (C)双精度数 (D)字符串,答案:D,3、以下程序的运行结果是_ main() int b=5; #define b 2 #define f(x) b*(x) int y=3; printf(%4d,f(y+1); #undef b printf(%4d,f(y+1); #define b 3 printf(%4dn,f(y+1); ,答案:8 20 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年快消投放人事外包协议
- 资料翻译服务公司总会计师述职报告
- 2024年“中银杯”安徽省职业院校技能大赛(高职组)智能电子产品设计与开发赛项规程
- 感染性腹泻病流行病学个案调查表2026年
- 2026年退役军人信息化建设专项计划
- 2026年网络安全警察网络安全管理试卷
- 2026年人工智能广告智能投放考试试题及参考答案
- 2026年上半年森林公园管理工作总结
- 2026年校园文化建设提升专项计划
- 2026年资产保全高级岗位答辩试题题库
- 《门诊院感》课件
- 压力管道各种壁厚计算及校核
- DB23-T 3625.2-2023 金属非金属矿山双重预防机制建设评定指南 第2部分:地下矿山
- 人民调解委员会开庭调解笔录
- (完整word版)身份证号码前6位表示的地区对照表
- 金属与石材幕墙工程技术规范-JGJ133-2013含条文说
- 初中生物各章节概念知识框架图
- 空调维保质量保障体系及措施方案
- 城市轨道交通工程监测技术规范讲解课件
- 旅游学第四版李天元课后习题答案
- 花篮拉杆式悬挑盘扣脚手架施工工法
评论
0/150
提交评论