Я пытаюсь создать функцию, которая принимает два аргумента, но которая переопределяется макросом, чтобы вызвать другую скрытую функцию, которая принимает больше данных, чем было передано. Данные, которые я передам в скрытую функцию, - вещи как __LINE__
и __FILE__
вместе с данными из основной функции.
Проблема в том, что видимой функции требуется возможность передавать любое количество аргументов. Приведенный ниже код является упрощенным примером проблемы.
#include <stdio.h>
#include <stdarg.h>
///////////////////////////////////////////////////////////
// This is what I would like to be able to do
#define average(count, ...) _average(__LINE__, count, ...)
///////////////////////////////////////////////////////////
// The average function
double _average(int _line, int count, ...) {
// Just a use for the extra variable
printf("Calculating the average of some numbers\n");
printf("on line %i\n", _line);
// The data contained within the "..."
va_list args;
va_start(args, count);
// Sum up all the data
double sum = 0;
for (int i = 0; i < count; i++) {
sum += va_arg(args, int);
}
// Return the average
return sum / count;
}
int main() {
printf("Hello, World!\n");
// Currently, this is what I have to do as the method I would prefer doesn't work...
printf("Average: %f\n", _average(__LINE__, 3, 5, 10, 15));
// Is there a way to use the above macro like the following?
// printf("Average 2: %f\n", average(3, 2, 4, 6));
return 0;
}
Если это поможет, вывод этого кода будет следующим:
Hello, World!
Calculating the average of some numbers
on line 160
Average: 10.000000