【发布时间】:2017-08-01 13:08:05
【问题描述】:
争吵指向这段代码
#define DO_SAFE(do_work, goto_error) \
DO_IF(unlikely((do_work) < 0), goto_error)
这是来自一个头文件。我不明白这段代码试图做什么或比较。对我来说似乎 do_work if false 然后 goto 错误。但如果这是正确的,它会是
(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_work参数是什么?它是否调用返回布尔值的函数?如果是这样,结果将是 0 或 1,两者都不小于 0,因此您会收到关于条件始终为假的警告。 “不太可能”是对编译器的提示,即条件可能不成立。 -
我在问题中添加了更多代码。希望我能更好地理解 C 以跟踪与 0 进行比较的常量阀
-
您没有显示
touch_i2c_read()或synaptics_ts_page_data_read()的声明,它们都在 DO_SAFE 宏调用中使用。代码是在所有三个函数上重现问题,还是只在一个函数上重现问题——如果是三个函数中的一个或两个,是哪一个?请阅读如何创建一个 MCVE (minimal reproducible example)——它会告诉你这个,所以我不应该要求提供必要的信息。我无法提供更多帮助——Android 的 Linux 内核编程超出了我的专业领域。我只能应用一般原则,不能应用具体经验。 -
可能错误:应该返回 -1,就像使用 Do_Safe 的其他函数一样?
标签: android c kernel gcc-warning