2012-04-09 12 views
7

Jak mogę napisać (jeśli to w ogóle możliwe ...) funkcję, która pobiera nieznaną liczbę parametrów w C99 (typ powrotu jest stały)?Funkcja o nieznanej liczbie parametrów w C

+1

Masz na myśli funkcję wariadyczną? Jak 'printf'? Czy sprawdziłeś ''? – Potatoswatter

+0

Zdobądź książkę o C lub wyszukaj takie rzeczy w Internecie. –

+1

możliwy duplikat [podania zmiennej liczby argumentów] (http://stackoverflow.com/questions/3836272/passing-variable-number-of-arguments) – Potatoswatter

Odpowiedz

16

Tak można to zrobić w C z użyciem co określa się mianem funkcji o zmiennej liczbie argumentów. Dostępne są na przykład standardowe funkcje printf() i scanf().

Umieść wielokropek (trzy kropki) jako ostatni parametr, w którym chcesz ustawić "zmienną liczbę parametrów".

Aby uzyskać dostęp parametry obejmują <stdarg.h> nagłówka:

#include <stdarg.h> 

a potem masz specjalny rodzaj va_list co daje listę argumentów przekazywanych, można użyć va_start, va_arg i va_end makr do iteracji poprzez listę argumentów.

Na przykład

#include <stdarg.h> 

int myfunc(int count, ...) 
{ 
    va_list list; 
    int j = 0; 

    va_start(list, count); 
    for(j=0; j<count; j++) 
    { 
    printf("%d", va_arg(list, int)); 
    } 

    va_end(list); 

    return count; 
} 

Przykład połączenie:

myfunc(4, -9, 12, 43, 217); 

pełny przykład można znaleźć w Wikipedia.

Parametr count w tym przykładzie informuje wywoływaną funkcję o liczbie przekazanych argumentów. printf() i scanf() znaleźć to za pośrednictwem ciągu formatu, ale prosty argument count może to zrobić też. Czasami w kodzie używana jest wartość wskaźnika, taka jak ujemna liczba całkowita lub wskaźnik zerowy (zobacz na przykład: execl() ).

-1

Format z istniejącym przykład:

int yourFunc (int abc, ...) { 
    //your code here 
} 
+0

To tylko prototyp. –

+0

To już nie jest tylko prototyp, ale nie jest to pełne wyjaśnienie, jak pracować z argumentami o zmiennej długości. –

Powiązane problemy