# \[C\]fonction avec nombre d'arguments variable

**URL:** <https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009 "2016-02-20T23:07:51Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/1 "2016-02-20T23:07:51Z")

</div>

Bonjour!  
Je souhaiterais créer une fonction, qui, selon les cas, pourrait ne pas prendre le même nombre d’arguments.  
Pour mieux me faire comprendre, voici un exemple tout bête : cette fonction doit initialiser des structures, et au lieu de l’appeler à chaque fois pour chaque structure, je l’appelle 1 fois, en lui passant en argument les structures.  
Mon souci, c’est que je ne sais pas comment faire ce genre de chose. Il me semble que le main fait un peu ceci avec le \*argv, mais je ne comprends pas tout.  
Voilà, en espérant avoir été assez clair…  
 ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/2 "2016-02-20T23:07:52Z")

</div>

Tu as la réponse en effet. Le truc est qu’au lieu de passer tes argument un à un tu accepte un tableau (\*argv[]) d’arguments. Ensuite dans ton programme tu traite cette série d’argument comme un tableau classique 😉 . Voilà pour le principe après pour l’application je ne peut pas t’aider puisque ça fait plus de 5 ans que je n’ai pas retouché a du C/C++ ![:083](https://www.debian-fr.org/uploads/default/original/1X/d14bbab5e0eb9167fe7ed1d009c5a9b723425957.gif "yeux-ciel")

---

<div class="post-metadata">

**Author:** ![dmon](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dmon/32/5587_2.png) [@dmon](https://www.debian-fr.org/u/dmon)\
**Post date:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/3 "2016-02-20T23:07:53Z")

</div>

En plus c’est un truc qui interpelle tout le monde mais qu’on trouve rarement sur les bouquins.  
Mais pour tout le reste heureusement qu’il y a internet et ses moteurs de recherche :  
[_][Listes d’arguments variables](http://homepage.mac.com/pierremousel/LangC/LangCArgumentsVar.html)  
[_][Les fonctions à nombre variable darguments](http://www.cppfrance.com/tutoriaux/FONCTIONS-NOMBRE-VARIABLE-ARGUMENTS_877.aspx)

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/4 "2016-02-20T23:07:55Z")

</div>

En Borland C (je ne sais pas si c’est ANSI) on utilisait la déclaration “…”

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/5 "2016-02-20T23:07:55Z")

</div>

Comme en Java ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/6 "2016-02-20T23:07:55Z")

</div>

Je n’ai jamais vue de fonctions variadiques en ja va et c’est temps mieux parce que même en C c’est pas terrible a utiliser (l’exemple le plus connu est printf).

Le plus simple c’est le tebleau en effet. Comme la fonction main, celle-ci reçoit la taille du tableau (int argc) et un tableau de chaine de caractères. Si tu as juste une structure dont le type diffère alors il faut utiliser des pointeurs sur tes structures.

---

<div class="post-metadata">

**Author:** ![dmon](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dmon/32/5587_2.png) [@dmon](https://www.debian-fr.org/u/dmon)\
**Post date:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/7 "2016-02-20T23:07:57Z")

</div>

[quote=“MisterFreez”]Je n’ai jamais vue de fonctions variadiques en ja va et c’est temps mieux parce que même en C c’est pas terrible a utiliser (l’exemple le plus connu est printf).[/quote] ![](http://yelims3.free.fr/Jesuis/Vieux02.gif)Eh, les petites jeunes faut pas pousser, Le C est vieux pratiquement 40ans et peut être plus. Le C++ et le Java est venu bien longtemps après, c’est normal que ce soit plus pratique avec eux.

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/8 "2016-02-20T23:07:58Z")

</div>

C’est une nouveauté Java 6. En fait il déclare une fonction avec un tableau en argument les «&nbsp;…&nbsp;» sont juste une facilitée d’écriture 😉

@dmon : Heureusement qu’en 40 ans on a fait des progrès dans les langage ![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit")

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 20, 2016, 11:07 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/9 "2016-02-20T23:07:59Z")

</div>

[quote=“MisterFreez”]Je n’ai jamais vue de fonctions variadiques en ja va et c’est temps mieux parce que même en C c’est pas terrible a utiliser (l’exemple le plus connu est printf).  
[/quote]  
Question de point de vue, j’avais réalisé en son temps des fonctions permettant la création de menu déroulant controlables à la souris dans une library sous ms-dos, et les appels à cette fonction se faisaient dans le style

```auto
menuPrincipal("&Fichier","Editio&n","&Affichage","&Historique");
```

Je trouve ça beaucoup plus élégant qu’un \*\*char, et plus facile à maintenir.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/10 "2016-02-20T23:08:00Z")

</div>

Le problème d’une fonction variadique c’est que t’es obligé de foutre en l’aire tout typage. En java (\>= 5) utiliser des object pour transtyper tout et n’importe quoi c’est pas recommandé. En C/C++ utiliser les void\* faut vraiment le faire avec parcimonie quand tu n’a pas d’autre choix.

Après avoir des fonctions variadiques en perl, python, ruby ou autre ce n’est pas un souci le duck typing est là pour gérer le typage et c’est réellement prévu par le langage.

Après ce sont des choix faites comme vous le sentez 🙂

NB : Pour l’astuce de l’elispe en Java (\>= 6) je ne connaissait pas je ne sais pas ce que ça fait exactement, mais comme dis plus haut ça semble être un simple sucre syntaxique.

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/11 "2016-02-20T23:08:02Z")

</div>

Merci à tous pour vos réponses et explications. Oui, le C, c’est pas le plus récent, mais ce n’est pas trop compliqué. Il faut que je continue avec le C++, mais na notion d’objet me fait un peu peur. Bref, en attendant, je vais lire les liens et tester 🙂  
 ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/12 "2016-02-20T23:08:02Z")

</div>

> [@thuban](#):
>
> Il faut que je continue avec le C++, mais na notion d’objet me fait un peu peur.

Ca n’a rien de bien sorcier … il ne faut pas en faire une montagne. 😉

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/13 "2016-02-20T23:08:04Z")

</div>

J’imagine bien, mais comme je commence à m’habituer au C, ça tout pleins de nouveaux mots 🙂 . Bon, j’ai jeté un tout petit oeil sur le site du zero hier soir, et c’est vrai que ça parait même plus simple en définitive. Le livre des éditions Eyrolles (“apprendre le C++”, C.Delannoy) est un peu moins attractif que le site du zero, mais faudra que je finisse de le lire quand même 🙂 .

Tiens, une petite question sans grande importance : les bibliothèques du C peuvent être réutilisées dans le C++ ?

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/14 "2016-02-20T23:08:06Z")

</div>

Oui sans problème. Pour grossir le trait C++ n’est qu’une surcouche au C. Donc tout ce que tu apprend en C tu peut le réutiliser en C++ ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/15 "2016-02-20T23:08:07Z")

</div>

> [@Mimoza](#):
>
> Oui sans problème. Pour grossir le trait C++ n’est qu’une surcouche au C. Donc tout ce que tu apprend en C tu peut le réutiliser en C++ ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

Le C++ est un vrai langage ! C’est juste qu’il est compatible avec le C.

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/16 "2016-02-20T23:08:11Z")

</div>

> [@MisterFreez](#):
>
> [quote=«&nbsp;Mimoza&nbsp;»]Oui sans problème. Pour grossir le trait C++ n’est qu’une surcouche au C. Donc tout ce que tu apprend en C tu peut le réutiliser en C++ ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

Le C++ est un vrai langage ! C’est juste qu’il est compatible avec le C.[/quote]  
Il faut quand même admettre que la syntaxe ressemble beaucoup à celle du C, et que pas mal de choses sont inspirées du C. Ceci dit, il y a quand même beaucoup de différences. Mais pour apprendre C++, ça aide de connaitre le C .

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/17 "2016-02-20T23:08:12Z")

</div>

> [@thuban](#):
>
> [quote=«&nbsp;MisterFreez&nbsp;»][quote=«&nbsp;Mimoza&nbsp;»]Oui sans problème. Pour grossir le trait C++ n’est qu’une surcouche au C. Donc tout ce que tu apprend en C tu peut le réutiliser en C++ ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

Le C++ est un vrai langage ! C’est juste qu’il est compatible avec le C.[/quote]  
Il faut quand même admettre que la syntaxe ressemble beaucoup à celle du C, et que pas mal de choses sont inspirées du C. Ceci dit, il y a quand même beaucoup de différences. Mais pour apprendre C++, ça aide de connaitre le C .[/quote]  
Oui un compilateur C++ comprend toute la syntaxe du C, mais il faut bien comprendre que c’est deux langages différents avec des mécanismes propres (préprocesseurs, typage,…). Il est important de comprendre ces différences.

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/18 "2016-02-20T23:08:13Z")

</div>

c’est pour ça que j’ai précisé “pour grossir le trait”

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/19 "2016-02-20T23:08:17Z")

</div>

Le site du zéro présente les différences entre le C et le C++ plus comme des améliorations. Ceci dit, je ne suis pas rendu au bout, mais c’est un bon plus aux autres cours qui sont souvent très magistraux.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 11:08 UTC](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009/20 "2016-02-20T23:08:44Z")

</div>

> [@thuban](#):
>
> Le site du zéro présente les différences entre le C et le C++ plus comme des améliorations. Ceci dit, je ne suis pas rendu au bout, mais c’est un bon plus aux autres cours qui sont souvent très magistraux.

Je ne suis jamais allé sur ce site. Mais ça prouve un grand manque de connaissance de la part des auteurs. Excusez moi d’insister mais ce sont deux langages qui évoluent de manière différentes et à des vitesses différentes. La dernière norme C, C99, ajoute dans la norme des choses qui ne sont actuellement pas gérer dans la norme C++ (mais c’est pris en compte dans C++ 1x).

Pour commencer dire «&nbsp;tu peut faire du C++ exactement de la même manière que du C&nbsp;» je suis d’accord mais il vaut mieux éviter d’énoncer des choses fausses même pour simplifier.

NB : A noter qu’historiquement le C++ a était conçu comme un «&nbsp;super-préprocesseur&nbsp;» pour le C mais on parle là du C++ de 1972.

[Page suivante](https://www.debian-fr.org/t/c-fonction-avec-nombre-darguments-variable/28009.md?page=2)
