看看这个是撒意思(MACRO: max of a and b is: -1 为什么是-1)
#define MAX_MACRO(a, b) ((a) > (b) ? (a) : (b))
int MAX_FUNC(int a, int b) {
return ((a) > (b) ? (a) : (b));
}
int testFunc(){
unsigned int a = 1;
int b = -1;
printf("MACRO: max of a and b is: %d\n", MAX_MACRO(++a, b));
printf("FUNC : max of a and b is: %d\n", MAX_FUNC(a, b));
return 0;
}上面宏代码调用中,结果是(a < b),所以a只加了一次,所以最终的输出结果是:
MACRO: max of a and b is: -1
FUNC : max of a and b is: 2
那个宏,MACRO: max of a and b is: -1 为什么是-1
[解决办法]
因为a是unsigned,比较时b会转成unsigned,(unsigned)-1是最大的
[解决办法]
1.在包含两种数据类型的任何运算里,两个值都被转换成两种类型里面的较高级别。
2.类型级别从高到低的顺序是long double, double, float, unsigned long long, long long, long, unsigned int 和 int.