闻方 2022-06-13 10:26 采纳率: 60%
浏览 41
已结题

调用枚举的作为函数参数时,参数从16进制变成了10进制。

调用枚举的作为函数参数时,参数从16进制变成了10进制。用define定义就不会这样,请问是为什么怎么解决。
typedef enum
{
EM_M_X_ON=(0x0061U),
EM_M_Y_ON=0x0883u,
EM_M_COM_ON=0x2083u,
EM_ALL_OFF=0x0083u,
}ctrldata;

EM_CTRL(EM_M_X_ON);

img

#define oj8k ((uint16)0x0061U)
EM_CTRL(oj8k);

img

  • 写回答

2条回答 默认 最新

  • Kx_Kevin 2022-06-13 11:21
    关注
    获得2.50元问题酬金

    现象可以这么理解,你看到的值,无论是97还是((uint16_t)0x0061U),不可否认它们表达的意思是相同的。
    为什么你会看到不同呢?
    【第二张图】是define的,define的值在编译器第一个阶段会被直接做替代处理,也就相当于第二张图的语句被编译时是:EM_CTRL((uin16_t)0x0061 U),而你鼠标指上去时指的是oj8k,所以会显示给你实际define的内容。
    【第一张图】是直接定义了枚举体变量的,所有变量无论你定义时写的是什么类型,鼠标指上去查看时都会给你显示十进制,不会以你的写法而变化的,所以你看到了十进制的枚举体成员内容。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月21日
  • 创建了问题 6月13日