GCC 6.3警告比较常数' 0' with Boolean表达式始终为false

时间:2017-03-11 03:41:15

标签: android c kernel gcc-warning

战争指向这段代码

#define DO_SAFE(do_work, goto_error)                \
 DO_IF(unlikely((do_work) < 0), goto_error)

这是来自头文件。我不明白这段代码的作用或比较。对我来说似乎是do dowork如果是假的话然后转到错误。但如果这是正确的那就是

 (do_work != 0) 

但这只是猜测。

请告知是否需要更多信息。

在c文件中给出错误的函数

for (page_num = 0; page_num < PAGE_MAX_NUM; page_num++) {
    DO_SAFE(touch_i2c_write_byte(client, PAGE_SELECT_REG, page_num), error);

for (u_address = DESCRIPTION_TABLE_START; u_address > 10; u_address -= sizeof(struct function_descriptor)) 
{
DO_SAFE(touch_i2c_read(client, u_address, sizeof(buffer), (unsigned char *)&buffer) < 0, error);

1 个答案:

答案 0 :(得分:1)

哦,我看到了问题(如果我水平滚动 - 线条很长):

DO_SAFE(touch_i2c_read(client, u_address, sizeof(buffer), (unsigned char *)&buffer) < 0, error);

您在宏调用中测试< 0条件,这意味着您最终会进行DO_SAFE扩展:

if ((touch_i2c_read(…) < 0) < 0)

并且内部条件的结果永远不会小于零。

使用:

DO_SAFE(touch_i2c_read(client, u_address, sizeof(buffer), (unsigned char *)&buffer), error);

(这已经消除了< 0直接调用中的DO_SAFE,让宏测试< 0。)