《编译预处理和分割编译.ppt》由会员分享,可在线阅读,更多相关《编译预处理和分割编译.ppt(13页珍藏版)》请在三一办公上搜索。
1、第10 章 编译预处理和分割编译,10,内容提要,本章主要介绍C程序设计中经常使用的编译预处理命令,以及对源程序进行分割编译的方法。编译预处理是对C源程序编译前进行的一些预加工,如置换源程序文件中的特定标识符,或是把指定的头文件嵌入到被编译的源文件里等操作。编译预处理是C语言的一个重要特点。它能改善程序设计环境,有助于编写易移植、易调试的程序,也是模块化程序设计的一个工具。,宏定义,宏定义是用标识符代替一个字符串,从而使程序更加简洁。1.不带参数的宏定义2.带参数的宏定义3.宏定义的解除,文件包含,文件包含的功能是把一个指定文件的全部内容嵌入到另一个文件中。1.文件包含的一般格式文件包含的一般
2、格式如下:#include 或#include 文件名,条件编译,条件编译的功能是只对源程序中的必要部分进行编译,而对其余部分不进行编译,不产生目标代码。在编译源文件之前,根据给定的条件,决定编译的范围,可使程序适应不同系统和不同硬件。1.条件编译的形式2.条件编译的功能,分割编译,在分割编译中,各独立的源文件构成一个编译单位,对它们各自进行编译,生成多个目标文件后再一次性连接。分割编译的各编译单位之间彼此独立,但更重要的是它们又互相联系。,本章总结,本章应重点掌握编译预处理的概念编译预处理命令的功能和特点,宏定义和文件包含的使用。,本章习题,一、选择题1.以下说法中正确的是_。A.#defi
3、ne和printf都是C语句 B.#define是C语句,而printf不是C.printf是C语句,但#define不是 D.#define和printf都不是C语句2.以下关于编译预处理的叙述中,错误的是_。A.C源程序中凡是以“#”开始的控制行都是预处理命令行B.预处理命令行必须位于源程序的开始位置C.一条有效的预处理命令行必须独占一行D.预处理命令是在正式编译之前先被处理的3.宏定义的宏展开是在_阶段完成的。A.程序编辑 B.程序编译 C.程序执行 D.预编译,4.在宏定义#define PI 3.14159中,宏名PI代替一个_。A.单精度数 B.双精度数 C.常量 D.字符串5.下
4、面程序的运行结果是_。#define PI 3.141593 main()printf(PI=%f,PI);A.3.141593=3.141593 B.PI=3.141593C.3.141593=PI D.以上答案都不正确,6.若有以下宏定义:#define STR%d,%c#define A 97已知字符a的ASCII码值为97,则语句printf(STR,A,A+2);的输出结果为_。A.97,a B.97,b C.97,c D.97,d7.以下程序的输出结果是_。#define M(x,y,z)x*y+z main()int a=1,b=2,c=3;printf(%dn,M(a+b,b+
5、c,c+a);A.19 B.17 C.15 D.12,8.下列程序执行后的输出结果为_。#define MA(x)x*(x-1)main()int a=1,b=2;printf(%dn,MA(1+a+b);A.6 B.8 C.10 D.12 9.执行下面的程序后,a的值是_。#define SQR(X)X*X main()int a=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf(%dn,a);A.10 B.1 C.9 D.0,二、填空题1.下面程序的输出结果是_。#define PR(ar)printf(%d,ar)main()int j,a=1,3,5,7,9,11,13,15,*p=a+5;for(j=3;j;j-)switch(j)case 1:case 2:PR(*p+);break;case 3:PR(*(-p);,2.下面程序的输出结果是_。#define POWER(x)(x)*(x)main()int a=1,b=2,t;t=POWER(a+b);printf(%dn,t);3.以下程序的输出结果是_。#define MAX(x,y)(x)(y)?(x):(y)main()int a=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf(%dn,t):,
链接地址:https://www.31ppt.com/p-6486256.html