宏是什么?
我的理解:一个预定的规则,一个将复杂运算打包好的模块
#define定义的宏
#define ADD(X,Y) X+Y
上述写法有问题,最后解释
#define,预处理指令,这段可以让你输入的参数相加
printf(“%d”,ADD(2,3));这段代码输出的内容是5,看似很成功,很简短。
但是!这与自定义函数是有区别的。
与函数的不同
这个X和Y并不含有变量的类型,可以是任何内容,甚至可以是一个运算结果
X = 3 + 4,Y = 3 + 3
但是!宏的返回是单纯的返回运算关系,换言之,我定义的宏其实是为了将复杂的运算打包
所以如果输出 3 * ADD(2,3)的话,结果不是3 * 5 = 15
而是3 * 2 + 3,结果为9
如果想要正确的结果,应该这样写:#define ADD(X,Y) ((X) + (Y))
这样就是3 * ((2)+(3)) = 3 * 5 = 15了
为什么要小括号?如果你设定的是X*Y,然后再括号里写的是ADD(2 + 3, 3)得到的结果
同理,会变成2 + 3 * 3 = 11而不是15