首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

看看这个是撒意思(MACRO: max of a and b is: -1 为什么是-1),该如何处理

2012-03-28 
看看这个是撒意思(MACRO: max of a and b is: -1 为什么是-1)#define MAX_MACRO(a, b) ((a) (b) ? (a) :

看看这个是撒意思(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.

热点排行