宏定义分为不带参数宏定义和带参数宏定义两种。
1.不带参数宏定义
一般形式: #define <标识符> <字符串>
功能:把程序中该宏定义之后的所有指定标识符(宏名)用字符串(宏体)替换。其中标识符(宏名)不能用引号括起来,字符串(宏体)可缺省,表示宏名定义过或取消宏体。
宏定义的位置可任意改变,一般在函数外面,文件开头处。其作用域是从定义命令到文件结束。#undef可终止宏名作用域。
格式: #undef 宏名
宏展开:预编译时,用宏体替换宏名——不进行语法检查。
提示:
①引号中的内容与宏名相同也不置换。
例如:#define MAX 10
语句:printf("MAX"); (不置换)
例如:#define P 25
#define R return(2*P); (√)
例如:#define MAX MAX+10 (×)
③宏定义中使用必要的括号()。
例如:#define MAX 5+10(www.daowen.com)
语句:k=30/MAX; 结果:16
2.带参数宏定义
宏展开: area=3*2;
①宏展开:形参用实参换,其他字符保留。
例如:#define S (r) PI*r*r
相当于定义了不带参宏S,代表字符串"(r) PI*r*r"
②宏体及各形参外一般应加括号()。
例如:#define POWER(x) x*x
x=4; y=6; z=POWER(x+y);
宏展开:z=x+y*x+y;
一般写成: #define POWER(x) ((x)*(x))
宏展开: z=((x+y)*(x+y));
③较长定义在一行写不下时,可在本行末尾使用斜杠表示要续行,注意断开的位置。
例如:#define PRX printf("Chongqing Economic\
Management University."); \
printf("\n");
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。