(3)宏定义是用宏名代替一个字符串,在宏展开时只是作 简单的字符串替换,并不对语法是否正确进行检查。 例如在输入下列宏命令时: #define pi3. 1415926 将小数点“”错写成了“,”,在编译预处理时也不会报 错,只在编译时才会发现错误并报告错误。 (4)宏定义不是C++语句,一定不要在行末加分号,如果 加了分号,会将分号当成字符串的一部分进行替换。 (5)通常把# defin命令放在一个文件的开头,使其定义在 本文件内全部有效,即作用范围从其定义位置起到文件结 束 (6)可以使用# undef命令来取消宏定义的作用域
(3) 宏定义是用宏名代替一个字符串,在宏展开时只是作 简单的字符串替换,并不对语法是否正确进行检查。 例如在输入下列宏命令时: #define PI 3.1415926 将小数点“.”错写成了“ , ” ,在编译预处理时也不会报 错,只在编译时才会发现错误并报告错误。 (4) 宏定义不是C++语句,一定不要在行末加分号,如果 加了分号,会将分号当成字符串的一部分进行替换。 (5) 通常把#define命令放在一个文件的开头,使其定义在 本文件内全部有效,即作用范围从其定义位置起到文件结 束。 (6) 可以使用#undef命令来取消宏定义的作用域
# undef命令的一般格式为: # undef宏名 它的作用是通知编译预处理系统取消前面由# define命令所 定义的宏名,使其定义的宏名不再起作用。 例如: #define pi3.1415926 void maino #undef pi flo
#undef 命令的一般格式为: #undef 宏名 它的作用是通知编译预处理系统取消前面由#define命令所 定义的宏名,使其定义的宏名不再起作用。 例如: #define PI 3.1415926 void main() { …… } #undef PI f1() { ……}
由于# undef的作用,使PI的作用范围在# undef行处终止,因 此,在们1函数中,PI不再代表31415926。这样可以灵活控制 宏定义的作用范围。 (7)宏定义允许嵌套定义,即在进行宏定义时,可以使用已定 义过的宏名。 (8)对程序中用双引号括起来的字符串内的字符,即使与宏 名相同,也不进行替换 【例72】求半径为3的圆周长、圆面积和球体积。 #include <iostream.h> define v4.0/3.0*PIR实 #definer 3 void main( #define pi 3.1415926 #define l 2 PlR cout<<"L="<<L<<"S="<<S <<"V="<<V<<endl;
由于#undef的作用,使PI的作用范围在#undef行处终止,因 此,在f1函数中,PI不再代表3.1415926。这样可以灵活控制 宏定义的作用范围。 (7) 宏定义允许嵌套定义,即在进行宏定义时,可以使用已定 义过的宏名。 (8) 对程序中用双引号括起来的字符串内的字符,即使与宏 名相同,也不进行替换 【例7.2】 求半径为3的圆周长、圆面积和球体积。 #include <iostream.h> #define R 3 #define PI 3.1415926 #define L 2*PI*R #define V 4.0/3.0*PI*R*R*T void main() { cout<<"L="<<L<<"S="<<S <<" V="<<V<<endl; }