как передать и получить доступ к структуре вариационной функции в C

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

Вот примерная ситуация

typedef struct  {
 int num;
 bool dontIncludeFlag;
} number;


int average(unsigned count, ...){
    va_list ap;
    int j;
    int sum = 0;

    va_start(ap, count); 
    for (j = 0; j < count; j++) {
        if(va_arg(ap,number.dontIncludeFlag))        //This line does not work
        sum += va_arg(ap.num, number);               //so does this line
    }
    va_end(ap);

    return sum / count;
}


int main(){

   number a,b,c;

   a.num= 5;
   a.dontIncludeFlag = 0;

   b.num= 2;
   b.dontIncludeFlag= 1;

   c.num= 1;
   c.dontIncludeFlag= 0;

   average(3,a,b,c);
}

Как мне получить доступ к содержимому аргументов структуры, которые я передал


person Jake quin    schedule 03.04.2021    source источник
comment
В Интернете должно быть довольно много онлайн-руководств по использованию функции вариации. Все они должны указать, что функция va_arg (на самом деле это макрос) принимает тип в качестве аргумента и получает следующий целый аргумент. Вы не можете использовать va_arg для получения части аргумента (например, частей структуры).   -  person Some programmer dude    schedule 03.04.2021
comment
Отвечает ли это на ваш вопрос? Пример использования varargs в C   -  person Nikos Athanasiou    schedule 03.04.2021
comment
@Someprogrammerdude, вы действительно привели меня к решению проблемы, к сожалению, в том, что я читал, ничего из этого не упоминалось. Итак, как я решил это, внутри цикла for я создал переменную временной структуры number temp = va_arg(ap,number) и оттуда ее прогулка по парку, заменив две проблемные строки на if(temp.dontIncludeFlag == 0) и sum+= temp.num;. Если вы хотите опубликовать ответ, добрый сэр, я приму его, чтобы вы могли получить баллы.   -  person Jake quin    schedule 03.04.2021
comment
@NikosAthanasiou на самом деле это не так, моя проблема заключается в доступе к структуре, которая была передана внутри функции с переменным числом аргументов. Какой-то чувак-программист на самом деле дал мне необходимую информацию для решения проблемы.   -  person Jake quin    schedule 03.04.2021


Ответы (1)


Вы используете va_arg неправильно. Используйте его, чтобы присвоить переменной аргумент с переменным числом аргументов и затем получить доступ к члену.

    number n;
    for (j = 0; j < count; j++) {
        n = va_arg(ap, number);
        if(n.dontIncludeFlag)
            sum += va_arg(ap.num, number);
    }
person Samuel Hunter    schedule 03.04.2021