gpt4 book ai didi

我可以通过 C 宏自动收集函数列表吗

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:35 25 4
gpt4 key购买 nike

我想自动收集函数列表开始 FUN_BEGIN() 和 FUN_END() 宏,如果我把它写成:

FUN_BEGIN()

FUN_DEFINE(f1) {
printf("f1\n"); }

FUN_DEFINE(f2) {
printf("f2\n"); }

FUN_DEFINE(f3) {
printf("f3\n"); }

FUN_END()

代码展开如下:

static bool f1(void) 
{
printf("f1\n");
}

static bool f2(void)
{
printf("f2\n");
}


static bool f3(void)
{
printf("f3\n");
}


void global_fun(void)
{
f1();
f2();
f3();
}

我可以发布吗?

最佳答案

这是一种使用构造函数添加到列表的方法,允许使用您使用的确切语法。

#define FUN_BEGIN() struct __fun_list { \
struct __fun_list *next; \
bool (*f)(void); \
} *head = NULL; \
static void globals_list_add(bool (*f)(void)) { \
/* add f to the linked list... */ \
}

#define FUN_DEFINE(f) static bool f(void);\
static void __attribute__((constructor)) __construct_##f(void) {\
globals_list_add(f); \
} \
static bool f(void)

#define FUN_END() void global_fun(void) { \
struct __fun_list *cur; \
for(cur = head; cur; cur = cur->next) { \
cur->f(); \
} \
}

请注意,构造函数不一定按照声明的顺序调用,因此您可能需要在宏中使用 __LINE__ 以按定义的行号对列表进行排序。

关于我可以通过 C 宏自动收集函数列表吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16007214/

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