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

Что я хотел бы сделать, это заменить их чем-то вроде этого:

/* 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__))

... что, конечно, не является допустимым кодом препроцессора.

Игнорирование того, что этот конкретный случай, вероятно, должен быть решен с использованием функции, а не макроса препроцессора, можно ли определить переменную макрос MAX_OF_N ()?

Просто для ясности, конечный результат должен быть одним макросом, который принимает произвольное количество параметров и оценивает самый большой из них. У меня странное ощущение, что это возможно, но я не понимаю, как это сделать.

Ответы на вопрос(6)

Ваш ответ на вопрос