我想从宏的另一个宏列表中创建宏的宏列表。我不知道如何描述这个,所以让我举一个例子:
#include <stdio.h>
#define MACRO_LIST_DEFAULT \
MACRO(TEST1, TEST2) \
MACRO(TEST3, TEST4)
#define MACRO_LIST_MODIFIED \
MACRO(TEST1_MODIFIED, TEST2_MODIFIED) \
MACRO(TEST3_MODIFIED, TEST4_MODIFIED)
#define MACRO_LIST_FULL \
MACRO_LIST_DEFAULT \
MACRO_LIST_MODIFIED
#define MACRO(VAR1, VAR2) printf("%s:%s\n", #VAR1, #VAR2);
int main(void)
{
MACRO_LIST_FULL
}
// OUTPUT :
// TEST1:TEST2
// TEST3:TEST4
// TEST1_MODIFIED:TEST2_MODIFIED
// TEST3_MODIFIED:TEST4_MODIFIED
这项工作完美,这是我想要做的,但我不想填写&#34; MACRO_LIST_MODIFIED&#34;手动,但使用前面的列表&#34; MACRO_LIST_DEFAULT&#34;
实际上是这样的事情:#define MACRO_LIST_MODIFIED \
MACRO_LIST_DEFAULT // And add _MODIFIED to elements.
我真的不知道如何处理这个问题。
提前谢谢你,
答案 0 :(得分:1)
在这里,我认为这是你想要实现的,我假设你正在使用gcc:
#include <stdio.h>
#define MACRO_LIST( x ) \
MACRO(TEST1 ## x , TEST2 ## x ) \
MACRO(TEST3 ## x , TEST4 ## x )
#define MACRO_LIST_FULL \
MACRO_LIST( ) \
MACRO_LIST( _MODIFIED )
#define MACRO(VAR1, VAR2) printf("%s:%s\n", #VAR1, #VAR2);
int main(void)
{
MACRO_LIST_FULL
}