如何在 C 中获取值宏?
How to get value macro in C?
我在使用 C 中的宏时遇到问题。有什么方法可以调用并获取宏中的参数值来调用函数吗?
下面的示例代码会产生错误:
#define order(i) fruits_i##_banana()
void fruits_1_banana()
{
printf("Order banana\n");
}
int main()
{
int a = 1;
order(a);
}
你需要在i
前后使用##
。
#define order( i ) fruits_##i##_banana()
void fruits_1_banana()
{
printf("Order banana\n");
}
int main()
{
order(1);
}
请注意,您不能将 a
传递给 order
,因为宏扩展不会获取变量的值,它只是按原样使用变量名。
参考文献:https://docs.microsoft.com/en-us/cpp/preprocessor/token-pasting-operator-hash-hash?view=msvc-160
相反,您可以使用函数指针数组:
#include <stdio.h>
static void fruits_0_banana(void)
{
printf("Order banana 0\n");
}
static void fruits_1_banana(void)
{
printf("Order banana 1\n");
}
static void (*order[])(void) = {
fruits_0_banana, // Or NULL if you don't need it
fruits_1_banana,
// ...
};
int main(void)
{
int a = 1;
order[a]();
return 0;
}
我在使用 C 中的宏时遇到问题。有什么方法可以调用并获取宏中的参数值来调用函数吗?
下面的示例代码会产生错误:
#define order(i) fruits_i##_banana()
void fruits_1_banana()
{
printf("Order banana\n");
}
int main()
{
int a = 1;
order(a);
}
你需要在i
前后使用##
。
#define order( i ) fruits_##i##_banana()
void fruits_1_banana()
{
printf("Order banana\n");
}
int main()
{
order(1);
}
请注意,您不能将 a
传递给 order
,因为宏扩展不会获取变量的值,它只是按原样使用变量名。
参考文献:https://docs.microsoft.com/en-us/cpp/preprocessor/token-pasting-operator-hash-hash?view=msvc-160
相反,您可以使用函数指针数组:
#include <stdio.h>
static void fruits_0_banana(void)
{
printf("Order banana 0\n");
}
static void fruits_1_banana(void)
{
printf("Order banana 1\n");
}
static void (*order[])(void) = {
fruits_0_banana, // Or NULL if you don't need it
fruits_1_banana,
// ...
};
int main(void)
{
int a = 1;
order[a]();
return 0;
}