[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]
Il file stdarg.h della libreria standard definisce principalmente delle macro-istruzioni per gestire gli argomenti variabili passati a una funzione, assieme a un tipo di variabile, va_list, specifico per gestire il puntatore a tali parametri non dichiarati.
|
Tabella 610.1. Macro-istruzioni standard per la gestione di argomenti variabili.
|
Il listato successivo è tutto ciò che serve per realizzare la libreria:
|
Delle macro-istruzioni mostrate nell'esempio, la più difficile da interpretare potrebbe essere va_arg, la quale deve restituire il valore dell'area di memoria puntata inizialmente, ma garantendo di lasciare il puntatore pronto per l'area successiva. In pratica, prima viene incrementato il puntatore per l'area successiva, quindi viene dereferenziato ricalcolando lo spazio necessario a raggiungere la posizione precedente. In altri termini è come scrivere:
|
Viene riproposto un programma molto semplice, già apparso in altri capitoli, per dimostrare l'utilizzo delle macro-istruzioni dichiarate nel file stdarg.h.
|
Avviando il programma di esempio si deve visualizzare il messaggio seguente:
w = 10; x = 12.340000; y = 13; z = 14 |
Va ricordato che gli argomenti delle chiamate alle funzioni vengono adattati in modo tale da facilitare l'uso della pila dei dati. Pertanto, i valori che prevedono una rappresentazione in memoria troppo piccola, subiscono quella che è nota come «promozione».
La funzione che utilizza una quantità di argomenti variabili, dovrebbe gestire solo valori che non possono subire una trasformazione di questo tipo, altrimenti, quando utilizza la macro-istruzione va_arg deve indicare un tipo adeguato alla promozione che si prevede sia applicata ai valori degli argomenti.
A questo proposito si può notare che nell'esempio di utilizzo apparso nel capitolo, non si fa mai uso di tipi di dati di rango inferiore a int.
Wikipedia, stdarg.h
ISO/IEC 9899:TC2
The Open Group, The Single UNIX® Specification, Version 2, stdarg.h
<http://opengroup.org/onlinepubs/000095399/basedefs/stdarg.h.html>
Appunti di informatica libera 2008.11.27.00.26 anteprima --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com> <http://informaticalibera.net> Edizione di prova: si prega di segnalare i difetti.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome c_171_stdarg_h_187.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]