加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么我需要这个奇怪的演员用于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
    }
}

这段代码产生警告:

enumerated type mixed with another type

为了清理这个,我最终得到:

void func(void)
{
    myEnum val = (myEnum) 0;

    while(/*Do something*/)
    {
        val = ((myEnum) val + 1); // <= NO Warning here
    }
}

有人能说出为什么第一个表格不正确吗?
我觉得第二个没有第一个那么有意义.
我的意思是我更愿意阅读:

Add 1,considered as a myEnum value,to val (and store the result in val)

Store in val val + 1 considered as a myEnum value

注意:这是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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读