-
这是 C/C++ 里面的宏定义,在编译时,编译器会将其原样展开。
-
但是上面值得注意的是 如果调用时用的 s(2+3) 时,得到的并不是25,而是 2+3*2+3 = 11; 这就是所谓的原样展开,即先展开后计算。
-
所以为了避免上诉问题可以添加上括号,如下:
#define s(x) ((x)*(x))
#include<stdio.h> #define s(x) 4*(x)*x+1 main() {int k=5, j=2; printf("%d\n",s(k+j)); }
#define s(x) 4*(x)*x+1 的意思是定义s(x)= 4*(x)*x+1这个函数,不过你要注意括号,后面这个X没括号算的时就不能加括号,因此S(K+J)= 4*(5+2)*5+2+1=143