Paramètres des variables C


Parfois, vous pouvez rencontrer une situation dans laquelle vous souhaitez qu'une fonction prenne un nombre variable de paramètres au lieu d'un nombre prédéfini. Le langage C apporte une solution à cette situation en vous permettant de définir une fonction qui accepte un nombre variable d'arguments en fonction de vos besoins spécifiques. L'exemple suivant montre la définition d'une telle fonction.

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

Veuillez noter que le dernier paramètre de la fonction func() est écrit sous forme de points de suspension, c'est-à-dire trois points (... Le paramètre). avant que les points de suspension soient toujours int, représente le nombre total de paramètres variables à transmettre. Pour utiliser cette fonctionnalité, vous devez utiliser le fichier d'en-tête stdarg.h, qui fournit des fonctions et des macros qui implémentent des fonctionnalités variadiques. Les étapes spécifiques sont les suivantes :

  • Définir une fonction. Le dernier paramètre est des points de suspension. Le paramètre avant les points de suspension est toujours int, qui représente le nombre de points de suspension. paramètres.

  • Créez une variable de type va_list dans la définition de la fonction, qui est définie dans le fichier d'en-tête stdarg.h.

  • Utilisez le paramètre int et la macro va_start pour initialiser la variable va_list dans une liste de paramètres. La macro va_start est définie dans le fichier d'en-tête stdarg.h.

  • Utilisez la macro va_arg et la variable va_list pour accéder à chaque élément de la liste d'arguments.

  • Utilisez la macro va_end pour nettoyer la mémoire affectée à la variable va_list.

Suivons maintenant les étapes ci-dessus pour écrire une fonction qui prend un nombre variable d'arguments et renvoie leur valeur 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 Une fois compilé et exécuté, il produit les résultats suivants. A noter que la fonction average() est appelée deux fois, et à chaque fois le premier paramètre représente le nombre total de paramètres variables passés. Les ellipses sont utilisées pour transmettre un nombre variable d'arguments.

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