Latest web development tutorials

C paramètre variable

Parfois, vous pouvez rencontrer une telle situation, vous voulez fonctionner avec un nombre variable d'arguments, plutôt que d'un nombre prédéfini d'arguments. langage C pour ce scénario fournit une solution qui vous permet de définir une fonction qui peut accepter un nombre variable de paramètres en fonction des besoins spécifiques. L'exemple suivant illustre la définition d'une telle fonction.

int func(int, ... ) 
{
   .
   .
   .
}

int main()
{
   func(1, 2, 3);
   func(1, 2, 3, 4);
}

S'il vous plaît noter que la fonctionfunc () a des arguments écrits finaux que l' ellipse trois points (...),cet argument avant la suspension est toujoursint,ce qui représente le nombre total de paramètres variables à transmettre. Pour utiliser cette fonction, vous devez utiliser le fichier d' en- têtestdarg.h qui fournit la fonctionnalité de paramètres variables pour atteindre les fonctions et macros.les étapes spécifiques sont les suivantes:

  • La définition d'une fonction, le dernier paramètre est l'ellipse, ellipse en face du paramètre est toujoursint, représente le nombre de paramètres.
  • Créer une variable de typeva_list dans la définition de la fonction, ce type est défini dans le fichier d' en- tête stdarg.h.
  • paramètresInt et utiliser des macros va_startpour initialiser la variableva_listcomme une liste de paramètres. Stdarg.h va_start macro est définie dans le fichier d'en-tête.
  • Utilisez des macrosva_arg et variables va_listpour accéder à la liste des paramètres pour chaque élément.
  • Utiliser une macro pour nettoyerva_end mémoire des variables va_listdonné.

Suivons maintenant les étapes ci-dessus pour écrire des fonctions avec un nombre variable d'arguments et renvoie leur moyenne:

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

double average(int num,...)
{

    va_list valist;
    double sum = 0.0;
    int i;

    /* 为 num 个参数初始化 valist */
    va_start(valist, num);

    /* 访问所有赋给 valist 的参数 */
    for (i = 0; i < num; i++)
    {
       sum += va_arg(valist, int);
    }
    /* 清理为 valist 保留的内存 */
    va_end(valist);

    return sum/num;
}

int main()
{
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}

Lorsque le code ci-dessus est compilé et exécuté, il donne le résultat suivant. Il convient de noter que lamoyenne de la fonction ()est appelée à deux reprises, chaque fois que le premier paramètre représente le nombre total de paramètres variables sont transférées. Ellipses sont utilisés pour fournir un nombre variable d'arguments.

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000