Получить определение значения во время препроцессора в с

Я хочу создать определение, используя расширение макроса. Ядерное определение должно содержать значение другого определения. :)

Пример:

#define ONE            1
#define TWO            2
#define MACRO(x, y)    ...
...
#define MACRO_1_2      3

Мой вопрос: как я могу разрешить / использовать значение определения в раскрытии макроса?

Я пытался использовать

#define TEST_MACRO_V2(x, y)      TEST_MACRO_V2_"x"_"y"

, но я получаю следующую ошибку:

main.c: 18: 34: ошибка: «TEST_MACRO_V2_» необъявлена ​​(первое использование в этой функции) #define TEST_MACRO_V2 (x, y) TEST_MACRO_V2_ "x" _ "y"

Мой тестовый код:

#include <stdio.h>

#define ONE   1
#define TWO   2

#define TEST_MACRO_V1(x, y)      TEST_MACRO_V1_##x##_##y
#define TEST_MACRO_V1_ONE_TWO    3

//#define TEST_MACRO_V2(x, y)    TEST_MACRO_V2_##('x')##_##('y')  -> this version does not work
#define TEST_MACRO_V2(x, y)      TEST_MACRO_V2_"x"_"y"
#define TEST_MACRO_V2_1_2        4

int main()
{
    printf("Test Macro V1: %d
", TEST_MACRO_V1(ONE, TWO));
    printf("Test Macro V2: %d
", TEST_MACRO_V2(ONE, TWO));

    return 0;
}

Примечание: TEST_MACRO_V1 работает нормально. Мне нужно TEST_MACRO_V2.

Всего 1 ответ


Я попробовал это на ideone.com:

#include <stdio.h>

#define ONE   1
#define TWO   2

#define TEST_MACRO_HELPER(x, y) TEST_MACRO_##x##_##y
#define TEST_MACRO(x, y)        TEST_MACRO_HELPER(x, y)
#define TEST_MACRO_1_2          4

int main()
{
    printf("Test Macro: %d
", TEST_MACRO(ONE, TWO));
    return 0;
}

Выход:

Test Macro: 4

Есть идеи?

10000