大家在学习C语言与C++时肯定都使用过预编译指令,例如#define PI 3.14 有了这条指令,程序会在编译前将预编译指令下所有的PI替换为3.14,这么做有好处也有坏处,这样的替换不会进行类型检测,但却可以让一些可能变动的值十分方便的进行批量修改,进而提高编程效率。
这里主要叙述一个宏定义函数问题:
#include#define s(x) 4*x*x+1 int main(){ int a; int i=1,j=2; a=s(i+j); printf("%dn",a); }
这段代码的运行结果为多少呢?
37?
如上代码的运行结果为:
控制台显示为9而非很多人以为的37,这是为什么呢?
我们试着在宏定义时把X左右用括号括起来,代码如下:
#include#define s(x) 4*(x)*(x)+1 int main(){ int a; int i=1,j=2; a=s(i+j); printf("%dn",a); }
运行结果为:
很明显,从这两个结果可以看出:在没有加括号的时候,预编译指令替换的内容为:
4*1+2*1+2+1=9
而加了括号后,预编译指令替换的内容为:
4*(1+2)*(1+2)+1=37
由此可以得出,在使用宏定义函数时,我们需要格外的注意运算符的结合性与优先级,在合适的位置加上括号,确保程序计算结果为需求结果。



