第9聋 预处理命令
第9章预处理命令 本章内容 1.宏定义 2."文件包含"处理 3.条件编译
-2- 第9章 预处理命令 本 章 内 容 1. 宏定义 2. "文件包含"处理 3. 条件编译
第9章预处理命令 9.1宏定义 ■基本概念 ◆预处理命令 由 ANSI C统一规定,不是C语言本身的组成部分。 预处理的实现 宏定义 文件包含 条件编译
-3- 第9章 预处理命令 9.1 宏定义 基本概念 v 预处理命令 由ANSI C统一规定,不是C语言本身的组成部分。 v 预处理的实现 宏定义 文件包含 条件编译
第9章预处理命令 9.1宏定义 不带参数的宏定义 ◇一般形式:# efine标识符字符串 例如: define P 3.1415926 ☆说明 宏名一般用大写字母表示,以便与变量名相区别 ■宏定义是用宏名代替一个字符串,只作简单的置换,不作正 确性检査。 宏定义不是C语句,不必在行末加分号。 # define命令应放在程序中函数的外面,有效范围为定义命 令之后到本源文件结束。 可以用# undef命令终止宏定义的作用域。 在进行宏定义时,可以引用已定义的宏名,可以层层置换。 (例9.2) 对程序中用双引号括起来的字符串内的字符,即使与宏名相 同,也不进行置换。 ■宏定义与定义变量的含义不同,不分配内存空间
-4- 第9章 预处理命令 9.1 宏定义 不带参数的宏定义 v 一般形式: #define 标识符 字符串 例如: #define PI 3.1415926 v 说明 宏名一般用大写字母表示,以便与变量名相区别。 宏定义是用宏名代替一个字符串,只作简单的置换,不作正 确性检查。 宏定义不是C语句,不必在行末加分号。 #define命令应放在程序中函数的外面,有效范围为定义命 令之后到本源文件结束。 可以用#undef命令终止宏定义的作用域。 在进行宏定义时,可以引用已定义的宏名,可以层层置换。 (例9.2) 对程序中用双引号括起来的字符串内的字符,即使与宏名相 同,也不进行置换。 宏定义与定义变量的含义不同,不分配内存空间
第9章预处理命令 9.1宏定义 带参数的宏定义 ◆一般形式# define宏名(参数表)字符串 例如: #def ine s(a, b) a*b area =S(2, 3) 宏定义的展开:实参与虚参相对应,从左到右进行置换。 ◆例9.3: define P 3.1415926 #def ine s (r) Pl*r*r main o float a, area: a=3.6 area =S(a) printf(" %f, %f", a, area) 如果有语句:area=S(a+b);分析程序正误?
-5- 第9章 预处理命令 9.1 宏定义 带参数的宏定义 v 一般形式 #define 宏名(参数表) 字符串 例如: #define S(a, b) a*b area = S(2, 3); 宏定义的展开:实参与虚参相对应,从左到右进行置换。 v 例9.3: 如果有语句:area = S(a+b);分析程序正误? #define PI 3.1415926 #define S(r) PI*r*r main() { float a, area; a = 3.6; area = S(a); printf("%f, %f", a, area); }