c程序设计 谭浩强 第9章.ppt
文本预览下载声明
第九章编译预处理 * 9 编译预处理 9. 1 预处理功能 1. 简单宏定义的一般形式是: 有关宏的定义和使用要注意以下几点: 有关宏的定义和使用要注意以下几点: 有关宏的定义和使用要注意以下几点: 又如: 有关宏的定义和使用要注意以下几点: 有关宏的定义和使用要注意以下几点: 2 . 带参数的宏定义 带参数宏定义的一般格式 几点使用说明 几点使用说明 几点使用说明 3.带参数的宏和函数之间的比较 4.#、##运算符和宏替换嵌套 4.#、##运算符和宏替换嵌套 4.#、##运算符和宏替换嵌套 ③ 带参数的宏替换也可以嵌套定义。 9.2 文 件 包 含 1.文件包含的概念 3.文件包含的优点 4.说明 9.3 条件编译 9.3.1 #ifdef ~ #endif和#ifndef ~ #endif命令 9.3.1 #ifdef ~ #endif和#ifndef ~ #endif命令 9.3.2 #if ~ #endif [案例] 9.4 库函数使用方式 实验12 编译预处理、内部函数和外部函数 实验目的:掌握宏定义、宏调用,以及宏展的处理过程,掌握文件包含的概念和使用。掌握内部函数和外部函数的定义及使用方法。 实验内容: 1.试分析以下宏替换后的形式,计算输出结果。 要求:先计算运行结果,然后利用程序验证。 #include stdio.h #define CX(y) 2.5+y #define PR(a) printf(%d,(int)(a)) #define PR1(a) PR(a); putchar(\n) main() { int x=2; PR1(CX(5)*x); } 实验12 编译预处理、内部函数和外部函数 2.通过宏调用方式,求从n个数的最大值。 要求:数据从键盘输入。 3.已知a、b都为整型数,计算a*b。 要求: (1)a、b值从键盘输入。 (2)主函数和计算a*b的函数在不同文件中存放,求a*b的函数为内部函数,使用文件包含完成。 4.删除字符串中的指定字符。 要求:(1)字符串和要删除字符都在主函数中输入,结果在主函数中输出。 (2)主函数和删除字符串指定字符的函数在不同文件中存放,删除字符串指定字符的函数为外部函数。 Thank you ! * 第九章 9. 1预处理功能 9. 2文 件 包 含 9. 3条 件 编 译 9. 4库函数使用方式 * 所谓编译预处理是指,在对源程序进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。 9. 1 预处理功能 9. 2 文 件 包 含 9. 3 条 件 编 译 9. 4 库函数使用方式 #define 标识符 字符序列 其中,标识符称作宏名,一般用大写字母。例如: #define PI 3.1415926 对于像PI这样的宏在进行使用和处理时分为3个步骤:① 在函数之外(往往在程序开头)使用#define定义宏名;② 在程序中使用已定义的宏名;③ 在程序进行编译时,由预处理程序对宏名进行宏替换,恢复被宏名所代替的字符序列的原貌。 例如:#define N 50 #define PI 3.1415926 … int a[N]; double r,l; … l = 2*PI*r; … 经过宏替换之后,上述代码实际上就变成: … int a[50]; double r,l; … l=2*3.1415926*r; … ① 宏定义在源程序中要单独占用一行,通常“#”号出现在一行的第一个字符的位置,允许在#号的前面有若干空格或制表符,但不允许有其他字符。 ② 宏名用大、小写字母标识都行,为醒目起见,往往用大写字母表示。 ③ 用双引号括起来的标识符不做宏替换。例如:#define TRUE 1则打印语句printf(TRUE);会打印出TRUE,而不是1。 ④ 宏定义可以嵌套。例如: #define PI 3.1415926 #define TWOPI ( 2*PI ) 在预处理后,语句 c1=TWOPI * r; 便替换成 c1=( 2 * 3.1415926 ) * r; ⑤ 宏替换只是按原来的定义“机械地”进行替换,不管替换后的结果是对还是错。例如: #define A 3
显示全部