La macro va_end

Utilisation

va_end( aVaList );

Cette macro (attention, ce n'est pas une fonction) permet de libérer les ressources acquises durant un parcours des paramètres d'une fonction à nombre variable de paramètres.

Paramètre

  • aVaList : une variable de type va_list que la macro va initialiser.

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