У меня возникла небольшая теоретическая проблема. В куске кода я поддерживаю там набор макросов вроде
#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()?
Просто для ясности конечный результат должен быть единственным макросом, который принимает произвольное количество параметров и оценивает их наибольшую из них. У меня странное чувство, что это должно быть возможно, но я не вижу, как это сделать.