在c中的预处理器时间内获取定义值
Get define value in preprocessor time in c
我想使用宏扩展创建一个定义。装箱的定义应包含其他定义的值。 :)
示例:
#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: error: ‘TEST_MACRO_V2_’ undeclared (first use in this function)
#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\n", TEST_MACRO_V1(ONE, TWO));
printf("Test Macro V2: %d\n", TEST_MACRO_V2(ONE, TWO));
return 0;
}
Note: TEST_MACRO_V1 works fine. I need TEST_MACRO_V2.
我在 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\n", TEST_MACRO(ONE, TWO));
return 0;
}
输出:
Test Macro: 4
我想使用宏扩展创建一个定义。装箱的定义应包含其他定义的值。 :)
示例:
#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: error: ‘TEST_MACRO_V2_’ undeclared (first use in this function) #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\n", TEST_MACRO_V1(ONE, TWO));
printf("Test Macro V2: %d\n", TEST_MACRO_V2(ONE, TWO));
return 0;
}
Note: TEST_MACRO_V1 works fine. I need TEST_MACRO_V2.
我在 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\n", TEST_MACRO(ONE, TWO));
return 0;
}
输出:
Test Macro: 4