c - 预期说明符限定符列表位于 'if' 之前

标签 c linux-kernel battery

我在为 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/

相关文章:

c - FAT BPB 和小端反转

linux - 将系统调用编写为内核模块

c - DEFINE_SPINLOCK(...) spinlock_t 参数错误

Windows 上带有 Docker 的 Linux 内核与 WSL Linux 内核不匹配

python - 使用 Python 在 Windows 中获取电池容量

c - 动态调整大小的结构体 - 艰难地学习 C

c - %g 如何对 float 进行四舍五入?

c++ - 如何使用二进制搜索将所有重复的字符串打印在排序数组中?

ios - 以编程方式访问 iOS12 中的电池信息

android - Android R 中的后台服务在省电模式下停止