1.宏
1.1不带参数的宏:
形式:#denfine 用户标识符 字符串
(1)#define 用户标识符 字符串
eg:#define x 5
(2)#define 用户标识符 表达式
eg:#define x 3*y-1
(3)#define 用户标识符 字符串
eg:#define p printf
则p()为printf()函数,可调用p()输出信息
注:1.宏定义不是语句,不需要在后面加分号,如果有分号,表示宏名替换时包括后面的分号。
2.宏定义可以层叠定义:eg:#define PI 3.1415
#define S PI*r*r
1.2带参数的宏
定义:#define 宏名 字符串
eg:#define S(x,y) x*y
注:1.带参数的宏的使用方式与带参数的函数类似,调用时需要相应的参数,否则会出错。
2.带参数的宏定义编译之后只是用#define命令中的形参来替换的。
eg:#define L(x,y) sqrt(x*x+y*y)
z=L(x,y)改为z=L(x+1,y+1),这时替换后z=sqrt(x+1*x+1+y+1*y+1),要想得到正确结果则x,y应加上括号,如下所示:
#define L(x,y) sqrt((x)*(x)+(y)*(y))
3.带参数的宏定义名与参数之间不能有空格
eg:#define L (x,y) sqrt(x*x+y*y)
编译不会出错,但运行结果会出错。