#include <stdio.h>
#define R(x) x*x
main()
{int a;
int i=4;
a=++R(i+2); /*相当于a=++i+2*i*2 ,计算时,先算++i,此时i=5,然后5+10+2就是17 */
printf("%d\n",a);}
程序2
#include <stdio.h>
#define s(x) (x*x-1)*x
main()
{int a=5,b,k;
k=s(a-2); /*相当于k=(a-2*a-2-1)*a-2=(5-2*5-2-1)*5-2=-42 */
b=++s(a-2); /*相当于b=++(a-2*a-2-1)*a-2。对于一个非变量是无法执行++这个运算符,所以编译不了*/
printf("%d,%d",k,b);
getch();}
我总结一点:宏反正就是替换,不要随意加括号