#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
的多重定义。我的程序出了什么问题?
上面的代码是我的实际代码,并尝试在不同的平台上执行它,我看到了相同的错误
宏不应该接收参数(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