- 论坛徽章:
- 0
|
#include <stdio.h>
#define FUN1(x) (x * x)
#define FUN2(x) (x * x + x)
int main()
{
int i = 3, j, k;
j = FUN1(i++); //i++ 先使用,后++, 相当于 i*i; 两次i++; 因此j=3*3=9
k = FUN1(++i); //++i 先++,再使用. 由于宏的作用之前两次i++, i=5. 两次++i之后,i=7. i*i=49. K=49
printf("j = %d, k = %d\n", j, k);
i = 3;
j = FUN2(i++); //i++ 先使用,后++, 相当于 i*i+i; 三次i++; 因此j=3*3+3=12
k = FUN2(++i); //++i 先++,再使用. 由于宏的作用之前三次i++, i=6. 两次++i之后计算表达式i*i的值8*8=64。再做一次++i,i=9. 64+9=73. K=73
printf("j = %d, k = %d\n", j, k);
return 0;
}
你也可以用gcc -E 看宏展开后的代码
int main()
{
int i = 3, j, k;
j = (i++ * i++);
k = (++i * ++i);
printf("j = %d, k = %d\n", j, k);
i = 3;
j = (i++ * i++ + i++);
k = (++i * ++i + ++i);
printf("j = %d, k = %d\n", j, k);
return 0;
} |
|