清华大学出版社 TSINGHUA UNIVERSITY PRESS 例91 #define pi 3. 1415926 main Float l, s, r, v: printf(input raDius. ); scanf(%of, &r); =2.0*PEre s=Prror v=3.0/42PI“ rrsr; printf(l-=%010.4fns=%10.4fnv=%104fn",I, S
例9.1 #define PI 3.1415926 main() {float l,s,r,v; printf("input raDiuS∶"); scanf("%f",&r); l=2.0*PI*r; s=PI*r*r; v=3.0/4*PI*r*r*r; printf("l=%10.4f\nS=%10.4f\nv=%10.4f\n",l,s, v); }
清华大学出版社 TSINGHUA UNIVERSITY PRESS 运行情况如下: input radius: 4 l=251328 s=50.2655 V=150.7966 说明: (1)宏名一般习惯用大写字母表示,以便与变量名相 区别。但这并非规定,也可用小写字母 (2)使用宏名代替一个字符串,可以减少程序中重复 书写某些字符串的工作量。例如,如果不定义PI代 表3.1415926,则在程序中要多处出现31415926,不 仅麻烦,而且容易写错(或敲错),用宏名代替
运行情况如下: input radius:4 l=25.1328 s=50.2655 v=150.7966 说明: (1) 宏名一般习惯用大写字母表示,以便与变量名相 区别。但这并非规定,也可用小写字母。 (2) 使用宏名代替一个字符串,可以减少程序中重复 书写某些字符串的工作量。例如,如果不定义PI代 表3.1415926,则在程序中要多处出现3.1415926,不 仅麻烦,而且容易写错(或敲错),用宏名代替
清华大学出版社 TSINGHUA UNIVERSITY PRESS 简单不易出错,因为记住一个宏名(它的名字往往 用容易理解的单词表示)要比记住一个无规律的字 符串容易,而且在读程序时能立即知道它的含义 当需要改变某一个常量时,可以只改变# define命令 行,一改全改。例如,定义数组大小,可以用 #define array- size 1000 int arraylarray-sizel; 先指定 array-sie代表常量1000,因此数组 array大小 为1000,如果需要改变数组大小,只需改# define #define array-size 500 使用宏定义,可以提高程序的通用性
简单不易出错,因为记住一个宏名(它的名字往往 用容易理解的单词表示)要比记住一个无规律的字 符串容易,而且在读程序时能立即知道它的含义, 当需要改变某一个常量时,可以只改变#define命令 行,一改全改。例如,定义数组大小,可以用 #define array- size 1000 int array[array-size]; 先指定array-size代表常量1000,因此数组array大小 为1000,如果需要改变数组大小,只需改 #define 行: #define array-size 500 使用宏定义,可以提高程序的通用性
清华大学出版社 TSINGHUA UNIVERSITY PRESS (3)宏定义是用宏名代替一个字符串,也就是作简单 的置换,不作正确性检査。如果写成 #define pi 3. 4 59 即把数字1写成小写字母1,预处理时也照样代入, 不管含义是否正确。也就是说预编译时不作任何 语法检査。只有在编译已被宏展开后的源程序时 才会发现错误并报错 (4)宏定义不是C语句,不必在行末加分号。如果加 了分号则会连分号一起进行置换。如 # define pi3.1415926; area=Parr
(3) 宏定义是用宏名代替一个字符串,也就是作简单 的置换,不作正确性检查。如果写成 #define PI 3.l4l59 即把数字1写成小写字母l,预处理时也照样代入, 不管含义是否正确。也就是说预编译时不作任何 语法检查。只有在编译已被宏展开后的源程序时 才会发现错误并报错。 (4) 宏定义不是C语句,不必在行末加分号。如果加 了分号则会连分号一起进行置换。如: #define PI 3.1415926; area=PI*r*r;
清华大学出版社 TSINGHUA UNIVERSITY PRESS 经过宏展开后,该语句为 area=31415926;rr; 显然出现语法错误。 (5)# define命令出现在程序中函数的外面,宏名的有 效范围为定义命令之后到本源文件结束。通常, # define命令写在文件开头,函数之前,作为文件 部分,在此文件范围内有效。 (6)可以用#nde命令终止宏定义的作用域。例如:
经过宏展开后,该语句为 area=3.1415926;*r*r; 显然出现语法错误。 (5) #define命令出现在程序中函数的外面,宏名的有 效范围为定义命令之后到本源文件结束。通常, #define命令写在文件开头,函数之前,作为文件 一部分,在此文件范围内有效。 (6) 可以用#undef命令终止宏定义的作用域。例如: