- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[PPT制作技巧]编译预处理
编译预处理 编译预处理 ? 掌握宏定义的使用方法; ? 掌握文件包含的使用方法; ? 了解条件编译的使用方法。 C语言的编译系统分为编译预处理和正式编译,这是C 语言的一大特点,其中编译预处理是它和其他高级语言的一个重要区别。编译C语言程序时,编译系统中首先是编译预处理模块根据预处理命令对源程序进行适当的处理,然后才是对源程序的正式编译:对加工过的C源程序进行语法检查和语义处理,最后将源程序转换为目标程序。 预处理命令均以符号“#”开头,并且一行只能写一条预处理命令,结束时不能使用语句结束符,若预处理命令太长,可以使用续行标志“\”后续写在下一行,一般将预处理命令写在源程序的开头。 宏定义 C语言有两种宏定义命令: 不带参数的宏定义(或符号常量定义); 带参数的宏定义。 不带参数的宏定义 不带参数的宏定义通常用来定义符号常量,即用一指定的宏名(即标识符)来代表一个字符串,一般形式为: #define宏名 替换序列 其中宏名常用大写字母表示,宏名与替换序列(即字符序列)之间用空格符分隔。在程序中,经编译预处理后,就进行宏展开,凡是宏名出现的地方被替换为它所对应的替换序列。 从键盘连续输入字符,统计其中的小写字母的个数,直到按ESC键结束。 #include “stdio.h” #define ESC 0x1B main() { int count=0; char c; while(( c=getch( ))!=ESC) if(c=‘a’ c=‘z’) count++; printf(“count=%d”,count); }(宏不进行类型检验) 对于宏定义的使用,作以下几点说明: (1)预处理模块只是用宏名作简单的替换,不作语法检查,若字符串有错误,只有在正式编译时才能检查出来。 (2)没有特殊的需要,一般在预处理语句的行末不必加分号,若加了分号,则连同分号一起替换。如: #define ESC 0x1B; … … while((c=getch( ))!=ESC) … … 经过宏展开后,while语句变为: while((c=getch( ))!=0x1B;) 显然有错误,即表达式变为了语句。 (3)使用宏定义可以减少程序中重复书写字符串的工作量,提高程序的可移植性。例如,定义数组的大小: #define arr_size 100 int array[arr_size]; 这时数组的大小为100,若改变数组大小,则: #define arr_size 200 (4)宏定义命令一般写在文件开头、函数之前,作为文件的一部分,宏名的有效范围为宏定义之后到本源文件结束。如果要强制终止宏定义的作用域,可以使用#undef命令。如: PI的有效范围 #define PI 3.14159 main( ) { …… } #undef PI fly1( ) … … 这样就可以灵活控制宏定义的作用范围。 (5)进行宏定义时可以引用已定义的宏名,宏展开是层层替换。例如: #define PI 3.14159 #define R 4.0 #define L 2* PI* R #define S PI* R* R main( ) { printf(“L=%f\nS=%f\n”,L,S); } 经过宏展开后,printf函数中的输出项L、S展开如下: L -- 2* 3.14159* 4.0 S -- 3.14159* 4.0* 4.0 printf函数被展开成: printf((“L=%f\nS=%f\n”,2* 3.14159* 4.0, 3.14159* 4.0* 4.0) (6)程序中出现用双引号括起来的字符串中的字符,若与宏名同名,不进行替换。例如第(5)点的例子中printf函数内有两个S字符,一个在双引号内的S不被替换,而另一个在双引号外的S将被替换。 带参数的宏定义 带参数的宏定义不仅要进行字符串的替换,而且还要进行参数替换,一般形式为: #define 宏名(参数表)带参数的替换序列 其中,参数为形参。 宏展开过程:程序中若有带实参的宏,则按#define指定的替换序列从左至右进行替换。若宏定义中包含有形参,则用程序中相应的实参替换形参,其中实参可以是常量、变量或表达式; 从键盘输入两个数,输出较小的数。 #include “stdio.h” #define MIN(a,b) ((a)(b)?(a):
文档评论(0)