Possiamo passare un numero variabile di argomenti a una funzione in c?passando il numero variabile di argomenti
risposta
Here è un esempio:
#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 per esempio .... Mi piacciono gli esempi ... – Matthieu
Non riesco ad usare il 'register' qui? – haroldcampbell
L'uso di 'register' è la prova che il codice di esempio è piuttosto vecchio. L'uso di 'register' è un suggerimento per il compilatore per posizionare la variabile in un registro macchina, come ottimizzazione delle prestazioni. La maggior parte dei compilatori C negli ultimi 30 anni ha ignorato tale suggerimento, dal momento che può fare un lavoro migliore di assegnazione dei registri rispetto a quanto può fare la maggior parte dei programmatori. Al giorno d'oggi, 'register' ha pochi effetti diversi dal proibire il calcolo dell'indirizzo di una variabile. – Peter
Sì, se la funzione accetta argomenti variabili. Se hai bisogno di creare la tua funzione di argomento variabile, ci sono macro che iniziano con va_ che ti danno accesso agli argomenti.
Non proprio sbagliato, ma non molto utile. –
assicurarsi che l'elenco di argomenti variabili dovrebbe essere sempre alla fine della lista degli argomenti
esempio: void func(float a, int b, ...)
è corretto
ma void func(float a, ..., int b)
non è valido
Sì, ma questo è più un commento che una risposta. Certamente, hai spiegato un aspetto, ma è un aspetto molto minore della risposta. –
"È necessario considerare che l'utilizzo di funzioni variadiche (stile C) è un difetto pericoloso ", afferma Stephane Rolland. Puoi trovare il suo utile post here.
Credo che il consiglio sia per scrivere le proprie funzioni variadiche personalizzate in C++ e non per quelle fornite dalla libreria standard. Semplicemente, immagina la vita senza 'printf'! –
- 1. Passando numero variabile di argomenti da una funzione all'altra
- 2. Passaggio di numero variabile di argomenti
- 3. Funzione con numero variabile di argomenti
- 4. Passando ulteriori argomenti usando scipy.optimize.curve_fit?
- 5. Numero variabile di argomenti in VB
- 6. Funzione OCaml con numero variabile di argomenti
- 7. Come passare il numero variabile di argomenti alla funzione lambda
- 8. Il C# supporta un numero variabile di argomenti e come?
- 9. come inoltrare il numero variabile di argomenti in un'altra funzione?
- 10. zend_form ViewScript decorator/passando argomenti
- 11. Mockito utilizzando gli argomenti di confronto per quando chiama il metodo con numero variabile di argomenti
- 12. Funzione trap passando gli argomenti?
- 13. Modulo di estensione Python con numero variabile di argomenti
- 14. Passando variabile direttiva angolare
- 15. Passando stringhe come argomenti di verbi dplyr
- 16. Numero variabile di Java o argomenti per un metodo
- 17. Numero variabile di argomenti in stored procedure PL/SQL
- 18. Come fare una macro variadic (numero variabile di argomenti)
- 19. Come "passare" un numero variabile di argomenti a NSString's + stringWithFormat:
- 20. C++: puntatore alle funzioni con numero variabile di argomenti
- 21. Numero errato di argomenti?
- 22. Passando variabile JavaScript per Python
- 23. Passando variabile LESS a JavaScript
- 24. Passando funzioni in R come argomenti .Fortran
- 25. Passando argomenti (per argparse) con scoprimento unittest
- 26. Passando argomenti del costruttore in variabili d'istanza
- 27. Passando tutti gli argomenti a un costruttore
- 28. python - Come formattare il numero variabile di argomenti in una stringa?
- 29. Una funzione con numero variabile di argomenti con tipi noti, il modo C++ 11
- 30. Come chiamare un modello che accetta il numero variabile di argomenti in Play Framework 2
Tale funzione è chiamata [funzione variadica] (http://www.gnu.org/s/libc/manual/html_node/Variadic-Functions.html) (per coloro che cercano buone parole chiave di ricerca). – Seth
Grazie. Mi ha aiutato – Shweta
Non hai mai usato 'printf'? – dan04