19781011 发表于 2012-11-6 22:23:41

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))

jisaowang 发表于 2012-11-7 03:13:35

unsigned int 必然大于等于零,这个逻辑运算的前半恒真。。。。

19781011 发表于 2012-11-7 10:13:31

感谢楼上回复
还是没有明白楼上的意思

jisaowang 发表于 2012-11-7 15:11:45

19781011 发表于 2012-11-7 10:13
感谢楼上回复
还是没有明白楼上的意思

意思就是你把n>=0的=删了就没警告了

19781011 发表于 2012-11-7 22:04:11

本帖最后由 19781011 于 2012-11-7 22:20 编辑

多谢楼上,删了果然没有警告了

只是还是不太明白这个宏定义的意思,如果n的取值范围在逻辑表达式的范围,是否就为真(1)呢?
如果n=0的话,将n>=0中的=删除,那表达式是否就不成立了呢

jisaowang 发表于 2012-11-8 00:37:28

19781011 发表于 2012-11-7 22:04
多谢楼上,删了果然没有警告了

只是还是不太明白这个宏定义的意思,如果n的取值范围在逻辑表达式的范围, ...

你需要复习c语言。。。。

gamalot 发表于 2012-11-8 00:49:22

无符号数是永远大于等于零的,编译器警告你 n >= 0 这样的写法是毫无意义的

{:lol:}

19781011 发表于 2012-11-8 09:08:16

jisaowang 发表于 2012-11-8 00:37 static/image/common/back.gif
你需要复习c语言。。。。

手上有一本谭浩强的书,看了关于带有参数的宏定义一节,说的不是很多,所以对带有参数的宏定义还不是很清楚,请您指教

jisaowang 发表于 2012-11-8 14:56:11

把中国人写的书扔掉是你进步的第一步。。。。

19781011 发表于 2012-11-8 16:33:07

暂时还没有能力和条件不看中国人写的书
请您指教

jisaowang 发表于 2012-11-8 17:45:33

19781011 发表于 2012-11-8 16:33 static/image/common/back.gif
暂时还没有能力和条件不看中国人写的书
请您指教

不看原版可以看翻译的阿。。。。

这个警告跟参数宏没什么关系,而是告诉你这个逻辑运算对于uint类型来说是无意义的。因为uint类型是从零开始的整数,那么自然在逻辑上必然〉=0,那么&&前半部分的逻辑判断就恒为真,那么自然就是无意义的了。
所以如果要将这个宏应用于uint类型,就会出这种警告咯,如果传入的是int类型,自然就没有了。。。。。

19781011 发表于 2012-11-9 09:43:03

jisaowang 发表于 2012-11-8 17:45 static/image/common/back.gif
不看原版可以看翻译的阿。。。。

这个警告跟参数宏没什么关系,而是告诉你这个逻辑运算对于uint类型来说 ...

这个警告我已经明白了

如果n是uint型的,即默认n不可能小于0,那(n>=0)&&(n<=3) 这个逻辑表达式的前半部恒真,是否(n>=0)这句可以省略呢

另外这个宏定义到底是什么意思?还望您赐教

jisaowang 发表于 2012-11-9 15:49:50

这个宏定义返回一个bool值,就是check下你给的n是不是合法的参数。。。。允许的值就是0 1 2 3
因为可能传入的不是uint类型,也可能是int类型,所以。。。。

19781011 发表于 2012-11-9 20:55:36

第一次碰到这样的宏定义,通过您的指教,基本明白了这个宏定义的含义,多谢!
如果n为uint型,那么改为这样是否功能不变呢?
#define PARAM_I2C_SLAVEADDR_CH (   n )   (n<=3))

yao2013lin 发表于 2014-11-11 17:36:15

问题已解决

dreamer2016 发表于 2019-9-24 09:57:59

jisaowang 发表于 2012-11-8 14:56
把中国人写的书扔掉是你进步的第一步。。。。

厉害 就服你
页: [1]
查看完整版本: keil 编译出现的警告pointless comparison of unsigned integer with ...