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