宏定义好处:
(1)少些代码,可以将复杂的宏重定义为简单的。
(2)方便修改,定义一个变量,可以只修改变量,就可达到修改多出
但是对于复杂的宏,可能产生问题
例如定义一个宏函数,宏函数的好处就是减少函数调用入栈和出栈的开销,提高了效率,
下面是一个求平方的宏函数
#define square(x) x*x
我们验证一下:
cout<<square(3)<<endl;
好像没问题耶,
这样定义肯定有问题,那么对于cout<<square(2+3)<<endl;,就出问题了,于是我们该了下
#define square(x) (x)*(x)
我们验证一下:
cout<<square(2+3)<<endl;
好像没问题耶,
这样就可以了吗?
这样定义肯定有问题,那么对于cout<<25/square(2+3)<<endl;怎么不是我们期望的结果:1呀,就出问题了,于是我们该了下
#define square(x) ( (x)*(x))
我们验证一下:
cout<<square(2+3)<<endl;
ok了。
所以对于宏函数,参数的括号是不能少的。