#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//在所有使用GNU 扩展关键字的表达式之前加__extension__(两个下划线)关键字后,
//使用pedantic选项编译时,编译器就不再发出警告信息
//typeof(expression)用来获取expression的类型
#define min(X,Y) \
(__extension__ \
({ \
typeof(X) _x=(X), _y=(Y);\
(_x<_y)?_x:_y; \
}) \
)
//下面有副作用
//#define min(a,b) ((a)<(b)?(a):b)
/* 主函数 */
int main(int argc,char**argv)
{
int a1=3;
int a2=87;
int a=min(a1++,a2);
printf("a = %d",a);//输出a=3
//如果使用有副作用的宏定义,输出a=4
//至于min(++a1,a2),两种方法都有问题。
return 0;
}