相关疑难解决方法(0)

Variadic递归预处理器宏 - 它可能吗?

我遇到了一些理论问题.在一段代码中,我维护着一组宏

#define MAX_OF_2(a, b)       (a) > (b) ? (a) : (b)
#define MAX_OF_3(a, b, c)    MAX_OF_2(MAX_OF_2(a, b), c)
#define MAX_OF_4(a, b, c, d) MAX_OF_2(MAX_OF_3(a, b, c), d)
...etc up to MAX_OF_8
Run Code Online (Sandbox Code Playgroud)

我想做的是用这样的东西替换它们:

/* Base case #1, single input */
#define MAX_OF_N(x)      (x)

/* Base case #2, two inputs */
#define MAX_OF_N(x, y)   (x) > (y) ? (x) : (y)

/* Recursive definition, arbitrary number of inputs */
#define MAX_OF_N(x, ...) MAX_OF_N(x, MAX_OF_N(__VA_ARGS__))
Run Code Online (Sandbox Code Playgroud)

...当然,这是无效的预处理器代码.

忽略这个特殊情况应该使用函数而不是预处理器宏来解决,是否可以定义一个可变的MAX_OF_N()宏?

为了清楚起见,最终结果应该是一个宏,它接受任意数量的参数并评估其中最大的参数.我有一种奇怪的感觉,这应该是可能的,但我没有看到如何.

macros c-preprocessor

39
推荐指数
5
解决办法
2万
查看次数

标签 统计

c-preprocessor ×1

macros ×1