我在为 Android 编译 Linux 内核时遇到错误...
我修改了电池驱动程序:
这里有 github 上的提交和所有文件:https://github.com/Lopicl/android_samsung_thunderkernel_cooperve/commit/6385d6206119a3f8551e17bbeae130d3230965bf
编译时出现错误:
drivers/power/max8986-power.c:188: error: expected specifier-qualifier-list before 'if'
你能帮我吗? :)
提前致谢, 马泰奥
最佳答案
当你的代码被编译时,前面有#的东西只会被处理一次;它们不会在运行时被处理。例如,这使得以下代码变得很糟糕:
if (max8986_power->isFullcharged == TRUE)
{
#define FULLY_CHARGED 1
}
else
{
#define FULLY_CHARGED 0
}
因为您实际上将 #define FULLY_CHARGED x
两次(预处理器忽略实际的 C 代码;不使用 if
检查)。
稍后,当您if (FULLY_CHARGED = 0)
时,您不仅会尝试检查无效定义的宏,而且您的代码会尝试分配该值,而不仅仅是检查一下! IF FULLY_CHARGED
是一个变量,你的意思是你的代码是 if (FULLY_CHARGED == 0)
(注意双等号,为了相等检查)。
也许您想将宏的定义更改为:
#if defined CONFIG_BLX
#define FULLY_CHARGED (max8986_power->batt_percentage == MAX_CHARGINGLIMIT) && (max8986_power->charging_status == POWER_SUPPLY_STATUS_CHARGING)
#else
#define FULLY_CHARGED (max8986_power->isFullcharged == TRUE)
#endif
并修复所有 IF 语句以检查是否相等而不是赋值。
关于c - 预期说明符限定符列表位于 'if' 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18655222/