一 .宏的理解
1. #define 机制包括了⼀个规定,允许把参数替换到⽂本中,宏只是实现一个简单的文本替换功能。
2. 宏的定义
#definename( parament-list ) stuff
其中neme是宏名,一般大写;( parament-list )是参数列表,注意该参数列表的左括号一定要和name紧邻着,不然会出现错误;stuff和右括号之间有一个空格,stuff是宏函数的具体实现,一般会出现参数列表里面的内容。
二 . 例题和使用注意
1. 参数加括号
写一个简单的计算平方的宏函数
#define SQUARE(x)x*x
此时我们在主函数中使用这个宏函数时,例如SQUARE(2);得到的结果是4,这一点显而易见。但是如果我们想得到3+2的平方,它得到的结果是不是我们想要的呢,如:SQUARE(3+2);分析一下,我们要始终注意宏函数是简单的文本替换,我们输入上述语句,得到的执行语句实际上是3+2*3+2结果是11。
使用注意:在写宏函数的具体实现时,在每个参数外加上(),这样就可以避免上述问题,#define SQUARE(x) (x)*(x),再次计算3+2的平方时是这样替换的,(3+2)*(3+2);得到的结果就是25。
2. 执行语句加括号
解决了上面的问题,我们的宏函数还是存在问题的,我在上面的基础之上再次调用一下,定义宏函数
#define SQUARE(x)(x)+(x)
使用宏函数,我想计算3+2的二倍之后的结果在乘以10,以我们的习惯会通过如下方式进行调用,10*SQUARE(3+2),乍一看这个结果是100,但实际是不是呢。注意宏函数时简单的文本替换,替换后的执行结果是这样的,10*(3+2)+(3+2),结果是55。
使用注意:写宏函数时,不光在参数外加括号,还注意适当的在整个执行语句外加括号。
(因时间关系,关于宏函数还有其他的注意是事项,以后再做补充)