




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编 译 预 处 理,第 9 章,#define,#include,#ifdef,-2-,9.1 编译预处理命令 1. 什么是编译预处理? 编译预处理是指C编译系统在对源程序进行编译之前,先对其进行一些预加工。例如: 把 #include 命令指定的头文件嵌入到源程序中来; 把 #define 命令定义的标识符替换为字符串等。,-3-,2. 编译预处理命令 C语言提供 3 种预处理命令: 宏定义: #define 文件包含:#include 条件编译:#ifdef 预处理命令与普通语句的区别:以“#”开头,行末不加分号。例如: #define PI 3.14159 #include ,-4-,9
2、.2 宏定义 什么是宏?宏是指用一个简单名字代替一个比较复杂的字符串。(宏观的名) 9.2.1 无参宏定义 定义形式: #define 宏名 字符串 例如:#define PI 3.1416 宏替换(宏展开):编译预处理时,编译系统用字符串3.1416 替换程序中的宏名PI。,-5-,例9.1 计算圆的周长、面积和体积。 #define PI 3.1416 / 宏定义命令 void main() float r, L, s, v; printf(input r: ); scanf(%f , ,-6-,几点说明: 宏名与字符串之间要用空格分开, 例如:#define PI 3.1416 ;宏名使
3、用大写字母以便与变量名相区别,宏不分配内存。 使用宏定义命令的优点:便于书写和修改,增强程序的通用性和可移植性。 例如,要将PI改为3.1415926,只要把宏定义命令改为 #define PI 3.1415926 即可。 又如, #define N 10,-7-,int aN; 要修改数组的大小,只要修改宏定义命令即可: #define N 100 编译预处理时只作替换,不作语法检查。例如: #define PI 3.14159 其中数字1写成了小写字母l,预处理时照样替换成小写字母l ,所以要认真检查。,-8-, 宏名的有效范围:从定义位置开始到程序结束。用#undef命令可以终止宏定义的
4、作用域。 宏定义可嵌套。 字符串内与宏名相同的字符不替换。,-9-,补充例题1 宏定义的嵌套。 #include #define R 10 #define PI 3.1416 #define S PI*R*R / 宏定义嵌套 void main() printf ( S=%fn, S); ,字符串内的字符S不替换,第1次替换:PI*R*R 第2次替换:3.1416*10*10,-10-,2R=1.60,1. 下列程序段输出结果是_。 #define R 0.8 printf(2R=%.2f, 2*R); ,课堂练习,-11-,9.2.2 带参数的宏定义 定义形式: #define 宏名(形参表
5、) 宏体 如:#define PI 3.1416 #define S(r) PI*r*r / S是带参数的宏 area=S(3); 在编译预处理时,对S(3)进行替换: 第1步用宏体替换宏名:area=PI*r*r; 第2步用实参替换形参:area=3.1416*3*3;,-12-,例9.4 带参数的宏定义。 #include #define ADD(x, y) x+y void main() int a=5, b=6, s; s=ADD(1,2); printf(s=%dn, s); s=ADD(a-1,b+1); printf(s=%dn, s); ,第1步替换:s=x+y; 第2步替换:
6、s=1+2;,第1步替换:s=x+y; 第2步替换:s=a-1+b+1;,-13-,使用带参数宏定义要注意以下几点: 宏名与括号之间不能留空格。如: #define S (r) PI*r*r 编译系统认为S是不带参数的宏名,S代表字符串 (r) PI*r*r 为了避免宏替换后优先级出错,可以在宏体中加上圆括号。例如: #define S(x) x*x int a=2, z; z=S(a+1);,第1步替换:z=x*x; 第2步替换:z=a+1*a+1; 出错,-14-,解决方法:给宏体中的参数加括号: #define S(x) (x)*(x) int a=2, z; z=S(a+1);,第1步
7、替换:z=(x)*(x); 第2步替换:z=(a+1)*(a+1); 正确,-15-,由以上例题可以看出,用带参数的宏可以实现一些简单运算,这一点与函数有相似之处,但二者有着本质区别:,-16-,22,2. 下列程序段输出结果是_。 #define M(x) x*(x+1) int a=10; printf(%dn, M(a+1) );,课堂练习,-17-,9.3 文件包含 文件包含是指将另外的文件包含到当前文件中。文件包含命令有2种格式: #include #include 文件名 例如:文件 f1.c 中包含文件 f2.c:,-18-,关于包含命令的说明: 在该命令中,文件名可以用尖括号或双引号括起来: # include # include f2.cpp 尖括号表示编译系统直接到标准库(文件夹)中查找被包含的文件;双引号表示编译系统先到源文件所在的文件夹中查找被包含的文件,找不到时,再到标准库中查找。,-19-, 一条包含命令只能指定一个被包含的文件。包含多个文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论