如何在 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;
}