Fonction variadique

Fonction variadique

En programmation informatique, une fonction variadique est une fonction d'arité indéfinie, c'est-à-dire qui accepte un nombre variable de paramètres.

De nombreuses opérations mathématiques et logiques peuvent se représenter sous forme de fonctions variadiques. Par exemple, l'addition de nombres ou la concaténation de chaînes de caractères peuvent s'appliquer à un nombre arbitraire d'opérandes.

Sommaire

Implémentations

PHP

PHP, depuis la version 4, permet de définir des fonctions variadiques. Au sein d'une telle fonction, les paramètres peuvent être obtenus à l'aide des fonctions func_num_args(), func_get_arg() et func_get_args()[1].

Exemple de code :

// Avant PHP 5.3 :
function somme() {
    $args = func_get_args();
    return array_sum($args);
}
 
// Syntaxe autorisée depuis PHP 5.3 :
function somme() {
    return array_sum(func_get_args());
}
 
somme(2, 2); // renvoie 4

C

Le langage C permet la définition de fonctions variadiques.

Les exemples les plus connus sont les fonctions printf et scanf de <stdio.h> (la bibliothèque standard d'entrées/sorties).

La récupération des arguments se fait grâce au type va_list de <stdarg.h>. La fonction doit alors trouver un moyen de connaître le type des arguments qui lui ont été fournis, ceux-ci étant choisis par l'utilisateur. Néanmoins, le prototype d'une fonction variadique doit comporter au moins un argument muet dont le type est connu.

La fonction suivante écrit les données fournies sur l'entrée standard, les types étant décrits dans une chaîne de format (comme avec printf[2]) :

#include <stdarg.h> /* Pour va_list */
#include <stdio.h>  /* Pour printf */
/* À noter que <stdio.h> inclut stdarg.h */
 
void afficher (const char *format, const char *espace, ...)
{
    /* Liste des arguments */
    va_list args;
    /* Initialisation, à partir du dernier paramètre connu */
    va_start (args,espace);
 
    /* Parcours de la chaîne de format et affichage des données */
    int i;
    for (i=0; format[i]; i++)
        switch (format[i])
        {
            /* Note au niveau des conversions :
             * – les arguments de type char ou short sont automatiquement convertis en int ;
             * – les arguments de type float sont automatiquement convertis en double.
             */
            case 'C' : case 'c' :
                printf ("%c%s",va_arg(args,int),espace);
                break;
            case 'D' : case 'd' :
                printf ("%d%s",va_arg(args,int),espace);
                break;
            case 'E' :
                printf ("%E%s",va_arg(args,double),espace);
                break;
            case 'e' :
                printf ("%e%s",va_arg(args,double),espace);
                break;
            case 'F' : case 'f' :
                printf ("%f%s",va_arg(args,double),espace);
                break;
            case 'G' :
                printf ("%G%s",va_arg(args,double),espace);
                break;
            case 'g' :
                printf ("%g%s",va_arg(args,double),espace);
                break;
            case 'H' :
                printf ("%X%s",va_arg(args,int),espace);
                break;
            case 'h' :
                printf ("%x%s",va_arg(args,int),espace);
                break;
            case 'O' : case 'o' :
                printf ("%o%s",va_arg(args,int),espace);
                break;
            case 'P' : case 'p' :
                printf ("%p%s",va_arg(args,void*),espace);
                break;
            case 'S' : case 's' :
                printf ("%s%s",va_arg(args,char*),espace);
                break;
            default : ;
        }
    /* Fermeture */
    va_end (args);
}
 
/* Exemple d'utilisation */
int main ()
{
    afficher ("doHefGcsp"," ",9572,9572,9572,6569.28,6569.28,6569.28,'$',"Exemple",NULL);
}

Ce programme affiche :

9572 22544 2564 6.569280e+003 6569.280000 6569.28 $ Exemple 00000000

Notes et références

Lien externe


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Fonction variadique de Wikipédia en français (auteurs)

Игры ⚽ Поможем сделать НИР

Regardez d'autres dictionnaires:

  • Template (programmation) — En programmation informatique, les templates (en anglais modèles, parfois aussi appelés patrons) sont une particularité de la programmation en langage C++, qui autorise l écriture d un code sans considération envers le type des données avec… …   Wikipédia en Français

  • Généricité — En programmation, la généricité d une fonction repose sur son indépendance vis à vis du type, et éventuellement du nombre de ses arguments. C est un concept important pour un langage de haut niveau car il permet d augmenter le niveau d… …   Wikipédia en Français

  • printf — Un exemple de la fonction printf. printf (pour l anglais print formatted, soit « imprimer formaté ») est une commande Unix permettant de faire afficher une chaîne de caractères à l écran. C est aussi un nom de fonction du langage C, et… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”