战争指向这段代码
#define DO_SAFE(do_work, goto_error) \
DO_IF(unlikely((do_work) < 0), goto_error)
这是来自头文件。我不明白这段代码的作用或比较。对我来说似乎是do dowork如果是假的话然后转到错误。但如果这是正确的那就是
(do_work != 0)
但这只是猜测。
请告知是否需要更多信息。
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);
答案 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
。)