Progrmation modulaire [C]

---vivi--- Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   -  
---vivi--- Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, j'ai un problème avec ce code :
MAIN.C
#include "essai.h"
#include <stdio.h>
#include <stdlib.h>


int main()
{
essai(void);
return 0;
}

ESSAI.H

void essai (void);

ESSAI.C
#include "essai.h"
#include <stdio.h>
#include <stdlib.h>


void essai(void)
{
printf("coucou");
}

est ce que quelqu'un peu m'aider?

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Je dirais même plus, qu'il ne faut pas sinon cela provoque une erreur. Le void se met dans la déclaration de la fonction et son prototype, pas à son appel.

Par exemple, tu peux mettre (et c'est mieux), int main(void);
Mais, tu ne peux pas mettre : essai(void). Juste : essai();
Cdlt
1
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
C'est ce qui me semblait, mais comme je n'étais pas sur, je me suis abstenue.
En quoi c'est mieux de mettre le void à la déclaration d'une fonction ?
0
loupius > Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention  
 
Comme fiddy est sans doute parti casser la croûte, je vais tenter de répondre à ta question.
Comme tu le sais ça ne change strictement rien, mais je trouve ça plus lisible de préciser void, de plus il n'y a pas d'ambiguïté et c'est la raison pour laquelle je le mets systématiquement.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention  
 
En fait :
int toto(); cela est une déclaration et non un prototype. Cela dit au compilateur de ne pas gérer les arguments. Donc si tu définis une fonction comme ça, tu pourras l'appeler avec des arguments sans soucis.
Alors que lorsque tu fais : int toto(void); cela est bien un prototype et tu dis au compilateur que cette fonction admet zéro argument. Donc un appel comme toto(1), sera refusé.

A noter que ceci est valable en C. En C++, il y a équivalence.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci de la mise au point très clair. On en apprend tout les jours.
C'est vrai qu'en C++ (que je connaît mieux) les arguments apparaissent dans le nom de la fonction, donc impossible de se tromper.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
précise un peu.
tu n'as pas besoin de préciser void lors de l'appel à essai().
0
---vivi--- Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   11
 
Pardon pour le retard j'ai eu des probs internet. Merci bcp pour vos explications très claires. J'ai tout compris
0