Ominide 7992 punti

Funzioni variadiche


Funzioni variadiche = funzioni con un numero variabile di argomenti. Lo standard di C ha una sintassi specifica per la dichiarazione di queste funzioni, ma non ha alcuna sintassi apposita per la loro definizione, è quindi necessario usare macro e funzioni della libreria stdarg.h.
I prototipi delle funzioni variadiche usano le elissi:
<tipo><funzione> (<tipo1> <argomento1>, …)
In ogni funzione variadica c’è almeno un elemento fisso, il primo, ma possono essercene anche di più, ma l’elissi rimane comunque l’ultimo argomento.


In C non è possibile determinare il numero e il tipo di argomenti di una chiamata di funzione, quindi il programmatore deve definire convenzioni che il chiamante adotta per specificare il numero e il tipo di argomenti:
- si può usare uno degli argomenti fissi per specificare il numero di argomenti con cui la funzione viene chiamata, ma può essere applicata solo se gli argomenti sono tutti dello stesso tipo
- si può usare un valore speciale (sentinella) come ultimo argomento, applicabile solo se gli argomenti opzionali sono dello stesso tipo
- si può usare uno degli argomenti fissi come pattern, il quale esprime tipo e numero di argomenti opzionali (es. specificatori di formato)
Nelle funzioni variadiche gli argomenti fissi hanno nome mentre quelli opzionali no. Per accedere a questi argomenti e necessario perciò usare macro parametriche definite nella libreria stdarg.h, e per accedervi:
- si inizializza un puntatore, di tipo va_list usando la macro va_start, passando a va_start il nome dell’ultimo argomento fisso della funzione
- si accede agli argomenti usando la macro va_arg, in cui è necessario specificare il tipo di dato, la prima invocazione accede al primo argomento opzionale, la seconda al secondo
- si termina l’uso della variabile di tipo va_list con la macro va_end
Quindi è possibile accedere agli argomenti opzionali illimitatamente, usando diverse variabili
di tipo di va_list, inizializzando ognuna con la macro va_start.
Non ci sono indicazioni sui tipi usati per gli argomenti opzionali, quindi ci sono le promozioni di default: gli interi sono int, i tipi in virgola mobile sono double, quindi va_arg(ap, float) non è corretta, perche provoca un comportamento non definito.
Considerazione generale: è complicato definire funzioni con argomenti di tipo diverso.
Hai bisogno di aiuto in Informatica?
Trova il tuo insegnante su Skuola.net | Ripetizioni
Potrebbe Interessarti
×
Registrati via email