Czy możemy przekazać zmienną liczbę argumentów do funkcji wc?przekazywanie zmiennej liczby argumentów
Odpowiedz
Here przykład:
#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));
}
+1 na przykład .... Podobają mi się przykłady ... – Matthieu
Nie mam tutaj dostępu do "rejestru"? – haroldcampbell
Użycie 'register' jest dowodem, że próbka kodu jest dość stara. Użycie 'register' jest wskazówką dla kompilatora, aby umieścić zmienną w rejestrze maszyny, jako optymalizację wydajności. Większość kompilatorów języka C w ciągu ostatnich 30 lat zignorowała tę wskazówkę, ponieważ mogą wykonać lepszą alokację rejestru niż większość programistów. W dzisiejszych czasach 'register' ma niewiele efektów innych niż zabraniające obliczania adresu zmiennej. – Peter
Jeśli jest to a function that accepts a variable number of arguments, tak.
Tak, jeśli funkcja przyjmuje zmienne argumenty. Jeśli chcesz utworzyć własną funkcję zmiennych-argumentów, istnieją makra, które zaczynają się od va_, które dają ci dostęp do argumentów.
Nie dokładnie źle, ale niezbyt pomocniczo. –
upewnić się, że lista zmienna argument powinien być zawsze na końcu listy argumentów
przykład: void func(float a, int b, ...)
jest poprawna
ale void func(float a, ..., int b)
nie jest ważne
Tak, ale jest to raczej komentarz niż odpowiedź. Z pewnością wyjaśniłeś jeden aspekt, ale jest to bardzo niewielki aspekt odpowiedzi. –
"Należy wziąć pod uwagę, że przy użyciu funkcji wielościowych (styl C) jest niebezpieczną wadą ", mówi Stephane Rolland. Możesz znaleźć jego pomocną wiadomość here.
Uważam, że porady są przeznaczone do pisania własnych niestandardowych funkcji variadic w C++, a nie do tych dostarczonych przez standardową bibliotekę. Po prostu wyobraź sobie życie bez 'printf'! –
Taka funkcja nazywa się [funkcja variadic] (http://www.gnu.org/s/libc/manual/html_node/Variadic-Functions.html) (dla osób szukających dobrych słów kluczowych w wyszukiwaniu). – Seth
Dzięki. Pomogło mi – Shweta
Czy nigdy nie używałeś 'printf'? – dan04