gpt4 book ai didi

c - #define 中 #ifdef 的逻辑实现

转载 作者:行者123 更新时间:2023-11-30 17:33:58 26 4
gpt4 key购买 nike

这段代码有办法吗

#include <stdio.h>

// #define t1

#define msg_a 1
#define msg_b 2
#define msg_c 3
#ifdef t1
#define msg_d 4
#define msg_e 5
#endif

#define call(msg) case msg_ ## msg: printf("msg_" #msg); break;

#define avail \
call(a) \
call(b) \
call(c) \
call(d) \
call(e) \


int main(void)
{
int test;

test = 2;

printf("test = %d\n", test);

switch (test)
{
avail
}

printf("\nend\n");

return 0;
}

获得(逻辑上)与以下代码相同的结果?

#define avail \
call(a) \
call(b) \
call(c)
#ifdef t1
call(d) \
call(e) \
#endif

所以,我不想生成像 case msg_b: printf("msg_" "b"); break; 这样的代码在我的里面switch如果t1未定义。

此外,可能会包含更多这样的定义,然后就会有

...
#ifdef t2
#define msg_f 6
#define msg_g 7
#endif
...

再说一遍,这应该像这样工作

#define avail \
call(a) \
call(b) \
call(c)
#ifdef t1
call(d) \
call(e) \
#endif
#ifdef t2
call(f) \
call(g) \
#endif

有没有办法得到类似的东西?

最佳答案

我不确定你想用这个来完成什么,所以我真的不知道这是一个好主意,但是......

#ifdef t1
#define t1_calls call(d) \
call(e)
#else
#define t1_calls
#endif

#ifdef t2
#define t2_calls call(f) \
call(g)
#else
#define t2_calls
#endif

#define avail t1_calls t2_calls

顺便说一句,我假设这只是为了展示您的意思,并且您了解有关宏的常规 C 约定(函数、大写、作用域等)

关于c - #define 中 #ifdef 的逻辑实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23565141/

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