清华大学出版社 TSINGHUA UNIVERSITY PRESS 例9.1 #define PI 3.1415926 mainO {floatl,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"=%10.4fnS=%10.4fnv=%10.4fn",1,s, V)为
例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 =25.1328 s=50.2655 v=150.7966 说明: (1)宏名一般习惯用大写字母表示,以便与变量名相 区别。但这并非规定,也可用小写字母。 (2)使用宏名代替一个字符串,可以减少程序中重复 书写某些字符串的工作量。例如,如果不定义P代 表3.1415926,则在程序中要多处出现3.1415926,不 仅麻烦,而且容易写错(或敲错),用宏名代替
运行情况如下: 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 array[array-size]; 先指定array-sizc代表常量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.14159 即把数字1写成小写字母1,预处理时也照样代入, 不管含义是否正确。也就是说预编译时不作任何 语法检查。只有在编译已被宏展开后的源程序时 才会发现错误并报错。 (4)宏定义不是C语句,不必在行末加分号。如果加 了分号则会连分号一起进行置换。如: #define PI 3.1415926; area=PI*r*r;
(3) 宏定义是用宏名代替一个字符串,也就是作简单 的置换,不作正确性检查。如果写成 #define PI 3.l4l59 即把数字1写成小写字母l,预处理时也照样代入, 不管含义是否正确。也就是说预编译时不作任何 语法检查。只有在编译已被宏展开后的源程序时 才会发现错误并报错。 (4) 宏定义不是C语句,不必在行末加分号。如果加 了分号则会连分号一起进行置换。如: #define PI 3.1415926; area=PI*r*r;
清华大学出版社 TSINGHUA UNIVERSITY PRESS 经过宏展开后,该语句为 area=3.1415926;*r*r; 显然出现语法错误。 (⑤)#define命令出现在程序中函数的外面,宏名的有 效范围为定义命令之后到本源文件结束。通常, #define命令写在文件开头,函数之前,作为文件 一部分,在此文件范围内有效。 (6)可以用#undef命令终止宏定义的作用域。例如:
经过宏展开后,该语句为 area=3.1415926;*r*r; 显然出现语法错误。 (5) #define命令出现在程序中函数的外面,宏名的有 效范围为定义命令之后到本源文件结束。通常, #define命令写在文件开头,函数之前,作为文件 一部分,在此文件范围内有效。 (6) 可以用#undef命令终止宏定义的作用域。例如: