gpt4 book ai didi

c - 如何将宏的 2 个参数拆分并重新整理为 2 个单独的宏?

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

我想定义一个宏,当像这样使用时:

ADD_TO_OPS("abc", 3)
ADD_TO_OPS("cdef", 2)
ADD_TO_OPS("xx", 4)

,将产生如下内容:

#define OPS_NAMES      "abc", "cdef", "xx"
#define OPS_VALUES 3, 2, 4

也就是说,我想让ADD_TO_OPS(NAME, VALUE)做以下事情(下面的代码不会起作用,只是让你看看我想做什么):

#ifdef OPS_NAMES
# define OPS_NAMES2 OPS_NAMES, NAME
# undef OPS_NAMES
#else
# define OPS_NAMES2 NAME
#endif
#define OPS_NAMES OPS_NAMES2
#undef OPS_NAMES2

#ifdef OPS_VALUES
# define OPS_VALUES2 OPS_VALUES, VALUE
# undef OPS_VALUES
#else
# define OPS_VALUES2 VALUE
#endif
#define OPS_VALUES OPS_VALUES2
#undef OPS_VALUES2

最佳答案

我建议使用称为 X 宏的东西。该方法有些不同,并且您仅限于拥有一组固定的已知值:

#define OPS X_OP("abc", 3) X_OP("cdef", 2) X_OP("xx, 4)

当你使用它时,你可以临时定义X_OP,选择你想要的任何内容。例如,以下内容将扩展为 "abc", "cdef", "xx",(注意结尾的逗号)。

#define X_OP(name, value) name,
... OPS ...
#undef X_OP

以下内容将扩展为 3, 4, 5,:

#define X_OP(name, value) value,
... OPS ...
#undef X_OP

您还可以做更高级的事情,例如:

#define X_OP(name, value) case value: return name;
char const * value_to_name(v)
{
switch(v)
{
OPS
default: return NULL;
}
}
#undef X_OP

关于c - 如何将宏的 2 个参数拆分并重新整理为 2 个单独的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13775546/

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