gpt4 book ai didi

c - 多个 __COUNTER__ C

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:19 24 4
gpt4 key购买 nike

我在玩预处理器和 c。尝试实现我自己的事件和层次结构系统。但是我遇到了一个问题。我正在尝试静态定义可以初始化的“模块”,以及一些预先静态定义的事件。对于我使用的事件,COUNTER 效果很好。但我不想混淆模块 ID 和事件 ID。

我想要实现的目标的简化版本:

层次结构.h

#define HIERARCHY_DEFINE(NAME) int hierarchyId = __COUNTER__

事件.h

#define EVENT_REGISTER(NAME) int eventId = __COUNTER__

主.c

#include "event.h"
#include "hierarchy.h"

EVENT_REGISTER(EventOne);
HIERARCHY_DEFINE(ModuleOne);
EVENT_REGISTER(EventTwo);

int main(void){
printf("events(%d, %d) modules(%d)\n",EventOne,EventTwo,ModuleOne);
return 1;
}

这将打印出:

events(0, 2) modules(1)

当我试图实现:

events(0, 1) modules(0)

我环顾四周,有人说我不能自己创建一个计数器。看到了升压计数器,但这也没有达到我想要的效果。

有人知道我该如何处理这种情况吗?

谢谢!

编辑:

对我的代码的实际外观略作修改

struct Event{
uint8_t eventId;
uint8_t * data;
const char * description;
};

#define EVENT_REGISTER(eventName, desc)\
static Event eventName = {.eventId = __COUNTER__, .data = 0, .description = desc }




EVENT_REGISTER(Timer_5, "Timer 5 hZ");

最佳答案

除非您对标识符有额外的要求,否则可以执行以下操作:

定义.inc

EVENT_REGISTER(Timer_5, "Timer 5 Hz")
EVENT_REGISTER(Timer_10, "Timer 10 Hz")
MODULE_REGISTER(Module_SSH)
MODULE_REGISTER(Module_NCO)
#undef EVENT_REGISTER
#undef MODULE_REGISTER

应用.c

#define EVENT_REGISTER(a, d) a,
#define MODULE_REGISTER(a)
enum events {
#include "definitions.inc"
};

#define EVENT_REGISTER(a, d)
#define MODULE_REGISTER(a) a,
enum modules {
#include "definitions.inc"
};

struct Event {
uint8_t event_id;
uint8_t *data;
const char *description;
};

#define MODULE_REGISTER(a)
#define EVENT_REGISTER(a, d) static struct Event Event_##a = { .event_id = a, \
.data = NULL, \
.description = d \
};
#include "definitions.inc"


int main (int argc, char **argv)
{
printf("events(%d, %d) modules(%d)\n", Timer_10, Timer_5, Module_SSH);

return EXIT_SUCCESS;
}

关于c - 多个 __COUNTER__ C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40505091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com