如何找到 X 宏枚举的元素数量

问题描述 投票:0回答:1
#define ID_ENUM(X)                        \
    X(TEL_ID, 0x100)           \
    X(ING_ID, 0x200)             \
    X(HEARTBEAT, 0x206) \
    X(FRAME, 0x400)           \
    XFRAME2, 0x410)

#define X(name, id) name = id,

typedef enum tx_ids {
    ID_ENUM(X)
} tx_ids_t;

#undef X

    #define X(name, id) +1
uint8_t var_list = 0 + ID_ENUM(X);
    #undef X

我正在尝试查找 enum 中的数字元素。我的编译器一直抛出错误作为

var_list
的多重定义。我的程序出了什么问题?

上面的代码是我的实际代码,并尝试在不同的平台上执行它,我看到了相同的错误

c enums macros
1个回答
0
投票

宏不应该接收参数(X),扩展中留下了+号,还有

XFRAME2
的拼写错误,你想要
X(FRAME2

你想要:

#include <stdio.h>
#include <stdint.h>

#define ID_ENUM         \
    X(TEL_ID, 0x100)    \
    X(ING_ID, 0x200)    \
    X(HEARTBEAT, 0x206) \
    X(FRAME, 0x400)     \
    X(FRAME2, 0x410)

#define X(name, id) name = id,
typedef enum tx_ids {
    ID_ENUM
} tx_ids_t;
#undef X

#define X(name, id) + 1
uint8_t var_list = 0 ID_ENUM;
#undef X

int main(void)
{
    printf("TEL_ID=0x%x\n", TEL_ID);
    printf("var_list=%d\n", var_list);
    return 0;
}

输出:

TEL_ID=0x100
var_list=5
© www.soinside.com 2019 - 2024. All rights reserved.