Fonctions variadiques

Une fonction est variadique si le nombre d'arguments est quelconque. Comme par exemple printf !

Motivation

On peut avoir envie de fonctions variadiques comme pour calculer le maximum :

maximum(1, 2) maximum(1, 2, 9, 5)

stdarg.h

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

#define SENTINEL -1

/**
 * \param the parameters are ints. They should be positive integers except the last number should be SENTINEL.
 * \result the maximum about the numbers
 * */
int maximum( int first, ... ) {
    int max = first;
    va_list parametersInfos;
    va_start( parametersInfos, first );

    while( true ) {
        int current = (int) va_arg( parametersInfos, int );
        if ( current ==  SENTINEL) break;
        if ( current > max )
            max = current;
    }    
    va_end( parametersInfos );
    return max;
}

int main() {
    printf( "%d\n", maximum( 2, 11, 5, SENTINEL ));
    return EXIT_SUCCESS;
}