如果一个宏里面的参数有副作用,会导致结果出现错误
例如
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAX(X,Y) ((X)>(Y)?(X):(Y))
int main()
{
int a = 1;
int b = 2;
int max = MAX(a++, b++);
printf("%d\n", max); //3
printf("%d\n", a); //2
printf("%d\n", b); //4
return 0;
}
对于MAX(a++,b++)
(a++)>(b++)?(a++):(b++)
使用前 1 2 3 (1>2)所以返回b++
使用后 2 3 4
所以printf("%d\n", max);返回的是3
printf("%d\n", a);返回的是2
printf("%d\n", b);返回的是4