/*({...})的作用是将内部的几条语句中最后一条的值返回,它也允许在内部声明变量(因为它通过大括号组成了一个局部

  1. /*本程序时为了验证用宏来做

  2. * 两个数的大小比较的写法*/

  3. #include

  4. #define MAX(x,y) ((x)<(y)?(y):(x))

  5. #define MIN(X,Y) ({\

  6. typeof (X) x_ = (X);\

  7. typeof (Y) y_ = (Y);\

  8. (x_ < y_) ? x_ : y_; })

  9. /*({...})的作用是将内部的几条语句中最后一条的值返回,它也允许在内部声明变量(因为它通过大括号组成了一个局部Scope)*/

  10. int foo(int *flag);

  11. int foo(int *flag)

  12. {

  13. *flag = *flag + 3;

  14. return *flag;

  15. }

  16. int main()

  17. {

  18. int a=3,b=5,c;

  19. c = MAX(b,foo(&a));

  20. printf("a,b,c=%d,%d,%d\n",a,b,c);

  21. /*此时a=9,b=5,c=9,调用MIN看是否a的值再加2次*/

  22. c = MIN(b,foo(&a));

  23. printf("a,b,c=%d,%d,%d\n",a,b,c);

  24. return 0;

  25. }

  26. /*运行结果:

  27. * [root@bogon c_study]# ./hong_max_min

  28. * a,b,c=9,5,9

  29. * a,b,c=12,5,5


  30. *证明MIN的写法才是正确的*/

 

你可能感兴趣的:(/*({...})的作用是将内部的几条语句中最后一条的值返回,它也允许在内部声明变量(因为它通过大括号组成了一个局部)