GCC 6.3 警告常量“0”与布尔表达式的比较始终为假
GCC 6.3 warning comparison of constant '0' with Boolean expression is always false
交战指向这段代码
#define DO_SAFE(do_work, goto_error) \
DO_IF(unlikely((do_work) < 0), goto_error)
这是来自头文件。我不明白这段代码试图做什么,或者比较。对我来说似乎是 do_work if false then goto error。但如果那是正确的,那会是
(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);
哦,我看到问题了(如果我水平滚动——线条相当长):
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);
(这已经消除了直接调用 DO_SAFE
中的 < 0
,留下宏来测试 < 0
。)
交战指向这段代码
#define DO_SAFE(do_work, goto_error) \
DO_IF(unlikely((do_work) < 0), goto_error)
这是来自头文件。我不明白这段代码试图做什么,或者比较。对我来说似乎是 do_work if false then goto error。但如果那是正确的,那会是
(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);
哦,我看到问题了(如果我水平滚动——线条相当长):
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);
(这已经消除了直接调用 DO_SAFE
中的 < 0
,留下宏来测试 < 0
。)