没有BUG 的MAX 宏
#include<stdio.h>
//#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MAX(a, b) ({\
__typeof(a) _a = (a);\
__typeof(b) _b = (b);\
_a > _b ? _a : _b;\
})
#define P(func) {\
printf ("%s = %d\n", #func, func);\
}
int main() {
int a = 7;
P(MAX(2, 3));
P(5 + MAX(2, 3));
P(MAX(2,MAX(3, 4)));
P(MAX(2, 3 > 4 ? 3 : 4));
P(MAX(a++, 6));
P(a);
int b = 3, c = 11;
P(b++);
P(++b)
P(++c);
P(c++);
return 0;
}
```c
MAX(2, 3) = 3
5 + MAX(2, 3) = 8
MAX(2,MAX(3, 4)) = 4
MAX(2, 3 > 4 ? 3 : 4) = 4
MAX(a++, 6) = 7
a = 8
b++ = 3
++b = 5
++c = 12
c++ = 12
_-typeof 类型解决了a++ 重复的问题;用 typeof 定义 a, b;
a++ 和++a:
前置a++ 是先打印,后进行加一;
后置++a 是先加一,后打印;