簡體   English   中英

從另一個宏生成C預處理器宏

[英]C preprocessor macro generation from another macro

我想從另一個宏列表創建宏的宏列表。 我不知道如何描述,所以讓我介紹一個例子:

#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

這項工作很完美,這是我想要做的,但是我不想手工填寫“ MACRO_LIST_MODIFIED”,而是使用上一個列表“ MACRO_LIST_DEFAULT”

實際上是這樣的:

#define MACRO_LIST_MODIFIED                 \
    MACRO_LIST_DEFAULT // And add _MODIFIED to elements.

我真的不知道該如何處理。

先感謝您,

在這里,我假設這是您要實現的目標,並且我假設您正在使用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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM