来自另一个宏的C预处理器宏生成

时间:2015-07-02 12:14:21

标签: c macros c-preprocessor

我想从宏的另一个宏列表中创建宏的宏列表。我不知道如何描述这个,所以让我举一个例子:

#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.

我真的不知道如何处理这个问题。

提前谢谢你,

1 个答案:

答案 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
}