\
(({ \
double sum = 0; \
int n = PP_NARG(__VA_ARGS__); \
sum = sums(n, __VA_ARGS__); \
pow(sum / n, -1); \
printf("sum:%f\n", sum); \
sum; \
}))
как мне применить FLOAT к каждому елементу VA_ARGS?
макросы это отдельный вид искусства
никто так и не ответил
#define FLOAT(x) _Generic((x), double: x, default: x##f) #define HARMONIC(...) \ (({ \ double sum = 0; \ int n = PP_NARG(VA_ARGS); \ sum = sums(n, VA_ARGS); \ pow(sum / n, -1); \ printf("sum:%f\n", sum); \ sum; \ })) double sums(int n, ...) { double sum = 0; va_list args; va_start(args, n); for (int i = 0; i < n; i++) { sum += FLOAT(va_arg(args, double)); } va_end(args); return sum; }
Ну типа так, хотя можно было сумму и каст в одном макросе написать, но так типа нагляднее https://godbolt.org/z/TK5ddK418
Обсуждают сегодня