Crea sito

Liste di argomenti variabili per numero e tipo

|di Andrea Fallico
E' possibile definire funzioni che accettano un numero variabile di argomenti, in c ne sono esempi printf e scanf. Per farlo si usa la sintassi ... nel prototype.
Per lavorare, con elenchi che hanno un numero di argomenti variabile, serve la libreria stdarg.h che mette a disposizione ciò che è necessario al programmatore per lavorare con funzioni così flessibili.
Ecco un esempio:

Codice:
#include <stdio.h>
#include <stdarg.h>
 
int somma(int, ...);
 
int main(){

  int a = 10, b = 100, c = 1000, d = 10000;

  printf("%d", somma(2, a, b));
  printf("%d", somma(3, a, b, c));
  printf("%d", somma(4, a, b, c, d));

}
 
int somma(int argNum, ...){
  int totale = 0;

  va_list ap;
  va_start(ap, argNum);
  while(argNum--)
     totale += va_arg(ap, int);

  va_end(ap);
  return totale;
}
int somma(int, ...); somma è un esempio di prototype di una funzione che accetta un numero di argomenti variabili. Nella sua definizione int somma(int argNum, ...) vengono esplicitati i nomi dei parametri, in questo caso solo uno argNum mentre rimane la sintassi ... a indicare una lista variabile. All'interno della funzione sono stati utilizzati le definizioni e macro di stdarg.h -va_list ap; gli oggetti di tipo va_list contengono le informazioni necessarie a lavorare con un numero variabile di argomenti. -void va_start(va_list ap, argNum); è una macro che inizializza l'oggetto di tipo va_list in modo che possa essere utilizzato da va_arg e va_end; deve essere chiamata prima che si tenti di accedere agli argomenti di un elenco variabile. -type va_arg(va_list ap, tipo); è una macro che viene espansa in un'espressione che ha il valore e il tipo dell'argomento successivo di un elenco variabile di argomenti e deve essere chiamata un numero di volte uguale al numero degli argomenti; modifica l'oggetto dichiarato va_list in modo che punti al prossimo argomento dell'elenco. Il tipo deve essere il tipo dell'argomento. -void va_end(va_list ap); è una macro chiamata quando tutti gli elementi di un elenco variabile di argomenti, che era stato inizializzato dalla macro va_start, sono stati elaborati; fa in modo che la restituzione del controllo della funzione sia corretta. L'esempio fatto è semplice, infatti i parametri sono tutti dello stesso tipo (int); in generale l'ultimo argomento a destra prima dei ... è *format, che deve indicare il numero e il tipo dei parametri (per esempio nella funzione printf(const char *format, ...) *format è una stringa che indica il numero e il tipo dei parametri; "a=%d, b=%c" indica che gli argomenti passati alla funzione sono due e che il primo è int e il secondo char).
c, c++, argomenti variabili

Condividi

Required

Required

Optional

Optional

BB Code/Smilies

Error CodeCaptcha ReloadDevi utilizzare i caratteri maiuscoli.
La vocale "O" è esclusa.