Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

La macro va_start

La structure va_list


Utilisation

va_start( aVaList, aParameter );

Cette macro (attention, ce n'est pas une fonction) permet d'initialiser une structure de données de type va_list afin de manipuler les paramètres (en nombre variable) qui suivront celui passé en second paramètre de cette macro.

Paramètres

Exemple de code

L'exemple proposé ci-dessous permet de trouver le plus grand entier positif parmi la liste de valeurs passées en paramètre. Le paramètre nommé correspond à la première valeur à comparer. Pour terminer la liste de paramètres, il vous est demandé de placer la valeur négative -1.

#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

int maximum( int first, ... ) {

    int max = first;
    va_list parametersInfos;
    /* Initialize the va_list structure */
    va_start( parametersInfos, first );

    while( true ) {

        /* Extraction of the next integer */
        int current = (int) va_arg( parametersInfos, int );

        if ( current == -1 ) break;

        if ( current > max ) {
            max = current;
        }

    }    

    /* Release va_list resources */
    va_end( parametersInfos );

    return max;
}

int main( int argc, char * argv[] ) {

    int result = maximum( 2, 11, 5, -1 );
    printf( "maximum( 2, 11, 5, -1 ) == %d\n", result );     /* 11 */


    result = maximum( 3, 8, 12, 1, -1 );
    printf( "maximum( 3, 8, 12, 1, -1 ) == %d\n", result );  /* 12 */

    return EXIT_SUCCESS;

}

Attention, si vous placez une valeur -1 avant le dernier de vos paramètres, les valeurs suivantes seront tout simplement ignorées.

Sujets connexes

va_arg
va_copy
va_end
va_list


La structure va_list