为什么我需要这个奇怪的演员用于enum算术?
发布时间:2020-12-16 06:51:45 所属栏目:百科 来源:网络整理
导读:我有这段代码: typedef enum myEnum_e{ VAL0,VAL1} myEnum;void func(void){ myEnum val = (myEnum) 0; while(/*Do something*/) { val = val + ((myEnum)1); // = Warning here }} 这段代码产生警告: enumerated type mixed with another type 为了清理这
我有这段代码:
typedef enum myEnum_e { VAL0,VAL1 } myEnum; void func(void) { myEnum val = (myEnum) 0; while(/*Do something*/) { val = val + ((myEnum)1); // <= Warning here } } 这段代码产生警告:
为了清理这个,我最终得到: void func(void) { myEnum val = (myEnum) 0; while(/*Do something*/) { val = ((myEnum) val + 1); // <= NO Warning here } } 有人能说出为什么第一个表格不正确吗?
比
注意:这是TI C28x编译器(适用于TI C2000 MCU). 编辑: 我的真正应用是为嵌入式软件定义自定义UART通信. typedef enum e_frame { FRAME_A,FRAME_B,FRAME_C,FRAME_COUNT } frame_e; typedef enum e_frameId { FRAMEID_A = 0x0A,FRAMEID_B = 0x42,FRAMEID_C = 0xFF } frameId_e; const frameInfo_s FramesInfo[FRAME_COUNT] = { [FRAME_A] = { .id = MCM_FRAMEID_A,// And other stuff },[FRAME_B] = { .id = MCM_FRAMEID_B,[FRAME_C] = { .id = MCM_FRAMEID_C,// And other stuff } } 最后ID到frame_e函数: frame_e UAR_FrameId2Frame(frameId_e id) { frame_e frame = (frame_e) 0; while(FramesInfo[frame].id != id && frame < FRAME_COUNT) { frame = (MCM_frames_e)(frame + 1); } return frame; } 解决方法
我在这里没有收到任何警告:
#include <stdio.h> typedef enum myEnum_e { VAL0,VAL1 } myEnum; int main (int argc,char *argv[]) { myEnum val = 0; while( 1 /*Do something*/) { val = val + 1; } return 0; } 编译:GCC 4.2.1 编译命令:gcc -Wall -pedantic x.c (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |