Вот две строки, которые я видел в OpenCV
#define CV_VA_NUM_ARGS_HELPER(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
#define CV_VA_NUM_ARGS(...) CV_VA_NUM_ARGS_HELPER(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
Полагаю, это подсчет числа переменных, передаваемых в CV_VA_NUM_ARGS
.Для примера возьмем следующий код:
CV_VA_NUM_ARGS(a,b,c)
будет расширен до
CV_VA_NUM_ARGS_HELPER(a,b,c,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
На данный момент я застрял в понимании происходящего.Конкретно, Я не знаю полезности _1
, _2
и т. Д. Кто-нибудь может мне помочь?Вот похожая запись , хотя и более сложная для меня.
РЕДАКТИРОВАТЬ: Когда я не передаю аргументы (скажем CV_VA_NUM_ARGS_HELPER()
), макрос будет заменен на 1вместо 0, почему это?