передавая переменное число аргументов - PullRequest
9 голосов
/ 01 октября 2010

Можем ли мы передать переменное число аргументов функции в c?

Ответы [ 5 ]

11 голосов
/ 01 октября 2010

Здесь является примером:

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

int maxof(int, ...) ;
void f(void);

int main(void){
        f();
        exit(EXIT SUCCESS);
}

int maxof(int n_args, ...){
        register int i;
        int max, a;
        va_list ap;

        va_start(ap, n_args);
        max = va_arg(ap, int);
        for(i = 2; i <= n_args; i++) {
                if((a = va_arg(ap, int)) > max)
                        max = a;
        }

        va_end(ap);
        return max;
}

void f(void) {
        int i = 5;
        int j[256];
        j[42] = 24;
        printf("%d\n", maxof(3, i, j[42], 0));
}
6 голосов
/ 01 октября 2010
0 голосов
/ 27 ноября 2011

«Вам следует учитывать, что использование функций с переменными координатами (в стиле C) - опасный недостаток », - говорит Стефан Роллан.Вы можете найти его полезный пост здесь .

0 голосов
/ 01 октября 2010

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

пример: void func(float a, int b, ...) является правильным

, но void func(float a, ..., int b) недопустимо

0 голосов
/ 01 октября 2010

Да, если функция принимает переменные аргументы. Если вам нужно создать собственную функцию с переменным аргументом, есть макросы, начинающиеся с va_, которые предоставляют вам доступ к аргументам.

...