当你的代码被编译时,前面带有# 的东西只被处理一次;它们不在运行时处理。例如,这使得下面的代码很糟糕:
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 语句以检查相等性而不是赋值。