在C语言中,我们常常会命名一些变量,比如说我们定义枚举变量时默认类型为int,我们在其他函数中可能不是这个类型,但是不影响使用,但是KEIL编译的时候往往会报警告。
这不今天写了些代码就遇到这个问题了,下面详细看看问题,以及解决方法。
我在先是写了一个枚举
typedef enum SystemStatus
{
DummyState = 0u,
DOTask = 1u,
TESK = 2u,
}SystemStatus_t;
SystemStatus_t SystemStatus;
然后我在某个函数中获取目前 SystemStatus 的值
volatile uint8_t CurrentState = 0;
CurrentState = SystemStatus;
中间呢让单片机切换一个状态,执行一些任务,之后再切回来
SystemStatus = CurrentState;
这时候keil编译就报警告了
这个问题就在刚刚赋值那条语句
warning: #188-D: enumerated type mixed with another type
SystemStatus = CurrentState;
我们第一次获取当前状态的时候是没有问题的,但是第二次赋值的时候就有问题了,说是这个类型和枚举的类型混合了,一想就是类型冲突导致的,由于本人有些轻微的强迫症,所以将其改为 0 Error(s), 0 Warning(s) 。
既然是enum类型冲突,那就改成enum不就好了,换成他承认的类型就ok了。
修改方法:
SystemStatus =(SystemStatus_t) CurrentState;
将 CurrentState 强转为 enum即可,最后再编译一下
0 Error(s), 0 Warning(s)
舒服!!!!!