




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第9 9章章 编译预处理编译预处理 主要内容 n宏替换 n文件包含 n条件编译 n预定义宏 n运算符和 后三节为 自学内容 预处理命令: n所谓预处理,就是C编译程序对C源程序 编译前由编译预处理程序对预处理命令 进行处理的过程。 nC语言中,以“”开头(如define) 的语句统称为编译预处理命令。 n这些命令必须在一行的开头以以“”开开 始,末尾不加分号始,末尾不加分号,以区别一般的C语 句。 C语言的预处理命令 宏定义: #define , #undef 文件包含: #include 9.1 宏替换 n不带参数的宏定义(即符号常量定义语句) #define 宏名 替换文本 n编译时编译预处理程序自动对源程序中的“ 宏名”用“替换文本”来替换,即宏展开 n例如: #define LENGTH 300 #define PI 3.1415926 宏替换使用说明 n(1)宏名一般用大写字母,以示与一般 变量区别。 n(2)使用宏替换的作用是提高程序的清 晰性、可移植性。 n(3) 宏定义是用宏名代替一个字符串 ,是简单的置换,并不作语法检查。 n(4) 宏定义语句末尾不能加分号,否 则会连分号一起置换。 (5) #define 命令出现在程序中函数的外 面;宏名的有效范围为:定义宏命令之后 到本源文件结束。 n(6) 可以用undef命令终止宏定义的作 用域。 n(7) “替换文本”中可以包含已定义过的 宏名。 n(8)“替换文本”不能替换双引号中的字 符串。 n(9) 在同一个程序段中,同一个宏名不能 重复定义。 9.1.2 带参数的宏定义 n一般形式: #define 宏名(参数表) 字符串 n说明: “字符串”中包含“参数表”中所指定的 参数。 【例】带参数的宏定义。 #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(c); printf(“b=%d,d=%fn“,b,d); 区别函数和带参数的宏定义 : n函数调用时,先求出实参表达式的值,再用这 个值赋给形式参数;带参数的宏定义仅仅进行 字符串的简单替换字符串的简单替换。 n函数调用是在程序运行时分配临时内存单元; 而宏展开是在编译时进行,展开时不分配内存 单元,不进行值传递。 n函数调用只占运行时间;宏替换只占编译时间 。 n宏替换后使源程序增长,函数调用不会。 写出下面程序的运行结果: #define MIN(x,y) (x) n在一些版本的C语言中,还允许“文件名”中带路径。 #include “file2.c” A A B B file1.cfile1.cfile2.c 包 含 文件包含示意图 ( a ) ( b ) 说明: n被包含的文件常以“.h”(head)结尾 ,用在文件头部,被称为“标题文件 ”或“头部文件”,如 stdio.h。 n其扩展名也可以为其它,如“.c”。 n如果需要修改一些常数,不必修改每 个程序,只需修改一个文件(头部文 件)即可。 【例9.8】include的使用 。 #include #include main( ) float a,b; float c; scanf(“%f%f“, c=fabs(a+b); printf(“The absolute value of a plus b is %.2fn“,c); 区别区别“文件名文件名”和和 关于关于includeinclude的使用的使用 ninclude “文件名” 带双引号的文件名, 系统将先在源程序所在 的目录内查找指定的包 含文件;如果找不到, 再按照系统指定的标准 方式到相关的目录中去 寻找。 多用于包含用户文件 ninclude 带尖括号的文件名 ,系统将直接按照指 定的标准方式到相关 的目录中去寻找。 多用于标准库函数 使用文件包含需注意: n一条文件包含命令只能包含一个文件。 如果需要包含多个文件,就必须使用多 条文件包含命令。 n文件包含的定义是可以嵌套的,即允许 一个被包含的文件包含其它文件。 n被包含文件与其所在的文件在预编译后 成为同一个文件。 课堂练习: n1、以下叙述中不正确的是: (A)预处理命令行都必须以号开始 (B)C程序中凡是以开始的命令行都是预处理命 令行 (C)C程序在执行过程中对预处理命令进行预处理 (D)以下是正确的宏定义 define IBM_PC 答案:C n2、在宏定义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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论