Как посчитать количество аргументов, переданных функции, которая принимает переменное количество аргументов? - PullRequest
38 голосов
/ 12 декабря 2010

Как посчитать количество аргументов, переданных функции в следующей программе:

#include<stdio.h>
#include<stdarg.h>
void varfun(int i, ...);
int main(){
        varfun(1, 2, 3, 4, 5, 6);
        return 0;
}
void varfun(int n_args, ...){
        va_list ap;
        int i, t;
        va_start(ap, n_args);
        for(i=0;t = va_arg(ap, int);i++){
               printf("%d", t);
        }
        va_end(ap);
}

Вывод этой программы через мой компилятор gcc под Ubuntu 10.04:

234561345138032514932134513792

так как найти сколько нет. аргументов фактически переданных в функцию?

Ответы [ 11 ]

0 голосов
/ 15 июня 2012

Это возможно и просто, просто добавьте еще одну переменную k в цикл и присвойте ей изначально 1, попробуйте этот код

#include <stdio.h>
#include <stdarg.h>

void varfun(int i, ...);

int main(){
        varfun(1,2);
        return 0;
}

void varfun(int n_args, ...)
        {
        va_list ap;
        int i, t, k;
        k = 1;
        va_start(ap, n_args);
        for(i=0;i <= va_arg(ap, int);i++){
               k+=1;
        }
        printf("%d",k);
        va_end(ap);
}
...