keil 编译出现的警告pointless comparison of unsigned integer with ...
CHECK_PARAM(PARAM_I2C_SLAVEADDR_CH(OwnSlaveAddrConfigStruct->SlaveAddrChannel));此语句为何出现警告warning:#186-D: pointless comparison of unsigned integer with zero
宏定义:#define PARAM_I2C_SLAVEADDR_CH ( n ) ((n>=0) && (n<=3))
unsigned int 必然大于等于零,这个逻辑运算的前半恒真。。。。 感谢楼上回复
还是没有明白楼上的意思 19781011 发表于 2012-11-7 10:13
感谢楼上回复
还是没有明白楼上的意思
意思就是你把n>=0的=删了就没警告了 本帖最后由 19781011 于 2012-11-7 22:20 编辑
多谢楼上,删了果然没有警告了
只是还是不太明白这个宏定义的意思,如果n的取值范围在逻辑表达式的范围,是否就为真(1)呢?
如果n=0的话,将n>=0中的=删除,那表达式是否就不成立了呢 19781011 发表于 2012-11-7 22:04
多谢楼上,删了果然没有警告了
只是还是不太明白这个宏定义的意思,如果n的取值范围在逻辑表达式的范围, ...
你需要复习c语言。。。。 无符号数是永远大于等于零的,编译器警告你 n >= 0 这样的写法是毫无意义的
{:lol:} jisaowang 发表于 2012-11-8 00:37 static/image/common/back.gif
你需要复习c语言。。。。
手上有一本谭浩强的书,看了关于带有参数的宏定义一节,说的不是很多,所以对带有参数的宏定义还不是很清楚,请您指教 把中国人写的书扔掉是你进步的第一步。。。。 暂时还没有能力和条件不看中国人写的书
请您指教 19781011 发表于 2012-11-8 16:33 static/image/common/back.gif
暂时还没有能力和条件不看中国人写的书
请您指教
不看原版可以看翻译的阿。。。。
这个警告跟参数宏没什么关系,而是告诉你这个逻辑运算对于uint类型来说是无意义的。因为uint类型是从零开始的整数,那么自然在逻辑上必然〉=0,那么&&前半部分的逻辑判断就恒为真,那么自然就是无意义的了。
所以如果要将这个宏应用于uint类型,就会出这种警告咯,如果传入的是int类型,自然就没有了。。。。。 jisaowang 发表于 2012-11-8 17:45 static/image/common/back.gif
不看原版可以看翻译的阿。。。。
这个警告跟参数宏没什么关系,而是告诉你这个逻辑运算对于uint类型来说 ...
这个警告我已经明白了
如果n是uint型的,即默认n不可能小于0,那(n>=0)&&(n<=3) 这个逻辑表达式的前半部恒真,是否(n>=0)这句可以省略呢
另外这个宏定义到底是什么意思?还望您赐教 这个宏定义返回一个bool值,就是check下你给的n是不是合法的参数。。。。允许的值就是0 1 2 3
因为可能传入的不是uint类型,也可能是int类型,所以。。。。 第一次碰到这样的宏定义,通过您的指教,基本明白了这个宏定义的含义,多谢!
如果n为uint型,那么改为这样是否功能不变呢?
#define PARAM_I2C_SLAVEADDR_CH ( n ) (n<=3))
问题已解决 jisaowang 发表于 2012-11-8 14:56
把中国人写的书扔掉是你进步的第一步。。。。
厉害 就服你
页:
[1]