C语言程序设计09章预处理命令.ppt
《C语言程序设计09章预处理命令.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计09章预处理命令.ppt(19页珍藏版)》请在三一办公上搜索。
1、第九章 预处理命令,概 述 ANSI C标准规定可以在C源程序中加入一些“预处理命令”(preprocessor directives),以改进程序设计环境,提高编程效率。这些预处理命令是由ANSI C统一规定的,但它们不是C语言本身的组成部分,更不是C语句。编译程序不能识别预处理命令,它们必须在对程序进行通常的编译(包括词法和语法分析、代码生成、优化等)之前被“预处理”,即在编译前先根据预处理命令的要求对程序做出相应的处理。经过预处理后,程序不再含有预处理命令了,然后再由编译程序对预处理后的源程序进行通常的编译处理,得到目标代码。,现在使用的许多C编译系统都包括了预处理、编译和连接等部分,在
2、进行编译时一气呵成。我们必须正确区别预处理命令和C语句、区别预处理和编译,才能正确使用预处理命令。C语言与其它高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。C语言提供的预处理功能主要有以下三种:1.宏定义 2.文件包含 3.条件编译 分别用相应的宏定义命令、文件包含命令和条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“#”开头。,9.1 宏定义,9.1.1 不带参数的宏定义 在C语言中,我们可以定义一个指定的标识符来代替程序中的一个字符串,这种定义称为“宏定义”,这个标识符(名字)称为“宏名”。一般定义形式为:#define 标识符 字符串 这就是已经介绍过的符号常
3、量的定义。如:#define PI 3.1415926 它的作用是:在编译预处理时,将程序中在该命令以后出现的所有的标识符PI都替换为3.1415926这个字符串。在预编泽时,将宏名替换成字符串的过程称为“宏展开”。define是宏定义命令。,例9.1#define PI 3.1415926main()float l,s,r,v;printf(input radius:);scanf(%f,说明:1)宏名一般约定用大写字母表示,以便与变量名相区别。2)使用宏定义,可以提高程序的通用性,能作到“一改俱改”。3)宏定义是用宏名代替一个字符串,只作简单的替换操作,不作正确性检查。如果词义或语义错误,
4、只有在编译已被宏展开后的源程序时才会发现错误并报错。例如:#define PI 3.14l59 把第二个“1”写成“l”。这样的错误在预处理时是不会被发现的,只有在编译时才会被发现井报错。4)宏定义不是C语句,不要随便在行末加分号。如果加了分号,则会连同分号一起进行替换。5)#define命令出现在程序中函数的外面,宏名的有效范围为宏定义之后到本 源文件末。通常,#define命令写在文件开头,函数之前,作为文件一部分,在此文件范围内有效。,6)可用#undef 命令来终止宏定义的作用域。这样可以灵活控制宏定义的作用范围。7)在进行宏定义时,又可引用已定义的宏名,实现层层置换。8)对程序中用双
5、引号括起来的字符串内的字符,即使与宏名相同,也不进行置换。如下例printf 函数的格式控制串中的L和S字符,它们不被置换。例9.2#define R 3.0#define PI 3.1415926#define L 2*PI*R#define S PI*R*R main()printf(“L=%fnS=%fn”,L,S);,运行结果为:L=18.849556S=28.274333,printf(“L=%fnS=%fn”,2*3.1415926*3.0,3.1415926*3.0*3.0);,9.1.2 带参数的宏定义,带参数的宏定义也是一种替换操作,但它要进行两次替换(宏名字符串被简单替换和
6、实参字符串简单替换形参)。其定义的一般形式为:#define 宏名(参数表)字符串 字符串中包含有参数表中所指定的参数。例如:#define S(a,b)a*b area=S(2,3);其中S(2,3)相当与2*3。带参宏定义的置换过程:在程序中如果有带实参的宏(例如S(3,2),则按define命令行中指定的字 符串从左到右进行置换;如果字符串中含有宏中的形参(如a,b),则将相应的实参字符串(可以是常量、变量或表达式)代替形参;如果字符串中的字符不是参数字符(如上例中*),则原样保留。这样,便形成了置换的字符串。,例9.3#define PI 3.14#define S(r)PI*r*rm
7、ain()float a,area;a=3.6;area=S(a);printf(“r=%fnarea=%fn”,a,area);说明:1)对带参数的宏的展开只是将宏名后面括号内的实参字符串代替define命令行中的形参。如果有以下语句:area=S(2+3);,与 3.14*a*a 相同,再相应的宏展开形式为:area=3.14*5*5;area=3.14*(2+3)*(2+3);area=3.14*2+3*2+3;请注意在a+b外面没有括弧,显然这与程序设计者的原意不符。应当在定义时,在字符串中的形式参数外面加一个括弧。即#define S(r)PI*(r)*(r)只有这样才会得到:are
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 09 预处理 命令
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6504020.html