gpt4 book ai didi

c - 在 x 宏定义中使用宏作为参数

转载 作者:行者123 更新时间:2023-12-03 03:32:43 25 4
gpt4 key购买 nike

考虑以下用户样式 x-macro :

#define PRIMES_X(func) \
func(2) \
func(3) \
func(5)

我们可以使用它来使用前三个素数重复调用传入的宏func。例如:

#define MAKE_FUNC(num) void foo ## num();
PRIMES_X(MAKE_FUNC)

将声明 void 返回函数 foo2()foo3()foo5()

到目前为止,一切都很好。现在假设我想在 x 宏本身的定义中使用宏作为参数,如下所示:

#define MAX_PRIME 5
#define PRIMES_X(func) \
func(2) \
func(3) \
func(MAX_PRIME)

它不起作用,因为 MAKE_FUNC 现在将尝试声明 void fooMAX_PRIME(),因为(我想) token 串联发生时不会扩展 MAX_PRIME .

我可以解决这个问题,以便它像以前一样声明 foo5() 吗?

最佳答案

您可以插入另一级宏扩展(下面的 PRIMES_X2)。

#define MAKE_FUNC(num) void foo ## num();
#define MAX_PRIME 5
#define PRIMES_X(func) PRIMES_X2(func, MAX_PRIME)
#define PRIMES_X2(func, maxPrimePar) \
func(2) \
func(3) \
func(maxPrimePar)

PRIMES_X(MAKE_FUNC)

使用gcc -E输出:

void foo2(); void foo3(); void foo5();

关于c - 在 x 宏定义中使用宏作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50403741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com