C第8章预处理讲义.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C第8章预处理讲义

第八章 预处理命令 本章教学目的: 理解预处理的概念,掌握宏定义、文件包含处理和条件编译的应用。 本章教学重点: 宏定义、文件包含”处理、条件编译 本章教学难点: 带参数的宏定义 本章作业: 8.1 宏定义 8.1.1 不带参数的宏定义 8.1.1 不带参数的宏定义 8.1.1 不带参数的宏定义 8.1.1 不带参数的宏定义 8.1.2 带参数的宏定义 8.1.2 带参数的宏定义 8.1.2 带参数的宏定义 8.2 “文件包含”处理 8.2 “文件包含”处理 8.2 “文件包含”处理 8.2 “文件包含”处理 8.2 “文件包含”处理 8.3 条件编译 8.3 条件编译 8.3 条件编译 8.3 条件编译 8.3 条件编译 * 内容提要 宏定义 “文件包含”处理 条件编译 ANSI C标准规定,可以在C源程序中加入一些“预处理命令”,用以改进程序设计的环境,提高编程效率。 预处理命令不是C语言的组成成分,不能直接对它们进行编译。 所谓编译预处理是指,在对源程序进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。 #define A 10 C提供的预处理功能主要有以下三种:宏定义、文件包含和条件编译。它们分别用宏定义命令、文件包含命令和条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“#”开头。 宏定义由预处理命令# define给出 在C语言中,“宏”分为无参数的宏(简称无参宏)和有参数的宏(简称有参宏)两种。 不带参数的宏定义的一般形式为: # define 标识符 字符串 含义是用指定的宏名(即标识符)来代表其后字符串。 其中:“define”为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别; “字符串”可以是常数、表达式、格式串等。 例如: #define SIZE 10000 #define PI 3.1415926 #define FORMAT “%d,%d,%d\n” 例8.1 # include stdio.h #define SIZE 5 int main() {int i,sum=0; int data[SIZE]; for(i=0;iSIZE;i++) {scanf(“%d”,data[i]); sum=sum+data[i]; } printf(“sum=%d\n”,sum); return 0; } 标识符称为“宏名”, 在预编译时将宏名替换成字符串的过程称为“宏展开” #define是宏定义命令 几点说明: 1)定义宏的目的是提高程序的可读性和通用性,便于程序的修改。例如若要把例8.1中数组data的元素个数改变为10,则只要将“#define SIZE 5”改为“#define SIZE 10”即可,程序中的其它语句均不用修改。 (2)不要在宏定义的行末加分号,因为宏定义不是C语句,加分号后,会将分号也作为字符串的组成部分,宏展开后可能出现错误。 (3)宏定义可以出现在程序的任何位置,一般位于文件开头,写在函数的外面。宏名的有效范围是从定义处到本源文件结束。可以用#undef命令终止宏定义的作用域。例如: #define PI 3.1415926 int main() { … #undef PI … } 由于#undef的作用,使PI的作用范围在#undef行处终止。若在#undef PI之后再出现PI,则是无效的。 (4)宏定义是用宏名代替一个字符串,凡在宏定义有效范围内的宏名都用该字符串代替,但要注意:双引号内的与宏名相同的字符串不认为是宏名,不进行替换。 例如: #define YES 1 … printf(“YES”); 程序将显示YES,而不是1。 (5)可以引用前面已经定义的宏名来定义新的宏,例如: #define I1 30 #define I2 60 #define J I1+I2 #define K J*2+J/2+I2 这里J引用了I1和I2,K引用了J和I2。注意K展开是:30+60*2+30+60/2+60,不要以为是:(30+60)*2+(30+60)/2+60。除非前面的定义是:#define J (I1+I2)。 带参数的宏定义的一般形式为: #define标识符(形参表) 字符串 字符串中包含了在括弧中所指定的参数 例如:# define S(a, b) ((a)*(b)) 带参

文档评论(0)

441113422 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档