清华大学出版社 TSINGHUA UNIVERSITY PRESS #define g 8.8 mainO G的有效范围 } 由于#undef的作用,使G的作用范围在#undef行处终止,因 此在f1函数中,g不再代表8.8。这样可以灵活控制宏定义 的作用范围
#define g 8.8 main() { | G的有效范围 . } #undef g f1() { . } 由于#undef的作用,使G的作用范围在#undef行处终止,因 此在f1函数中,g不再代表8.8。这样可以灵活控制宏定义 的作用范围
清华大学出版社 TSINGHUA UNIVERSITY PRESS ()在进行宏定义时,可以引用已定义的宏名,可以 层层置换。 例9.2 #define R 3.0 #define PI 3.1415926 #define L 2*PI*R #define S PI*R*R mainO { printf("L=%Ans=%fn",L,S);
(7) 在进行宏定义时,可以引用已定义的宏名,可以 层层置换。 例9.2 #define R 3.0 #define PI 3.1415926 #define L 2*PI*R #define S PI*R*R main() { printf("L=%f\ns=%f\n",L,S); }
清华大学出版社 TSINGHUA UNIVERSITY PRESS 运行情况如下: L=18.849556 s=28.274333 经过宏展开后,printf函数中的输出项L被展开为 2*3.1415926*3.0,S展开为3.1415926*3.0*3.0, printfi函数调用语句展开为 printf("L=%fns=%fn",2*3.1415926*3.0, 3.1415926*3.0*3.0); (8)对程序中用双括号括起来的字符串内的字符,即 使与宏名相同,也不进行置换。如例92中的 printf函数内有两个字符,一个在双引号内,它 不被宏置换,另一个在双引号外,被宏置换展开
运行情况如下: L=18.849556 s=28.274333 经过宏展开后,printf函数中的输出项L被展开为 2*3.1415926*3.0,S展开为 3.1415926*3.0*3.0, printf函数调用语句展开为 printf("L=%f\ns=%f\n",2*3.1415926*3.0, 3.1415926*3.0*3.0); (8) 对程序中用双括号括起来的字符串内的字符,即 使与宏名相同,也不进行置换。如例9.2中的 printf函数内有两个l字符,一个在双引号内,它 不被宏置换,另一个在双引号外,被宏置换展开
清华大学出版社 TSINGHUA UNIVERSITY PRESS (⑨)宏定义是专门用于预处理命令的一个专用名词, 它与定义变量的含义不同,只作字符替换,不分 配内存空间。 9.1.2 带参数的宏定义 不是进行简单的字符串替换,还要进行参数替换。 其定义的一般形式为 #define宏名(参数表) 字符串 字符串中包含在括弧中所指定的参数。如: #define s(a,b)a*b area=s(3,2);
(9) 宏定义是专门用于预处理命令的一个专用名词, 它与定义变量的含义不同,只作字符替换,不分 配内存空间。 9.1.2 带参数的宏定义 不是进行简单的字符串替换,还要进行参数替换。 其定义的一般形式为 #define 宏名(参数表) 字符串 字符串中包含在括弧中所指定的参数。如: #define s(a,b) a*b area=s(3,2);
清华大学出版社 TSINGHUA UNIVERSITY PRESS 定义矩形面积S,a和B是边长。在程序中用了s(3, 2),把3、2分别代替宏定义中的形式 #define S(a,b) a*h area=S(3,2); 得3*2 图9.1
定义矩形面积S,a和B是边长。在程序中用了s(3, 2),把3、2分别代替宏定义中的形式 图9.1