Probleme avec la programmation modulaire [Résolu/Fermé]

Signaler
-
 flo_rock_69 -
Bonjour, alors voila: il y a une petite chose que je n'ai pas bien compris, concernant la programmation modulaire en C, c'est que lorsque on a plusieurs fichier .c , comment peut on savoir dans quel ordre ils vont etre effectuer.

Par exemple pour essayer de comprendre, j'ai fait un projet contenant:

un fichier main.c :

#include <stdio.h>
#include <stdlib.h>
#include "main.h"


int main(int argc, char *argv[])
{
    int nombreEntre=0, nombreQuintuple=0;
    printf("dis un nombre\n");
    scanf("%d", &nombreEntre);

    nombreQuintuple=quintuple(nombreEntre);
    printf("le quintuple de ce nombre est %d", nombreQuintuple);

    return 0;
}





un fichier main.h :

int quintuple(int nombre)
{
    return 5 * nombre;
}




et un fichier testfonction.c

#include <stdio.h>
#include <stdlib.h>

void bonjour()
{
    printf("Hello");

    return 0;

}





alors, voila, quand je compile le tout cela me fait

[dis un nombre
3
le quintuple de ce nombre est 15]



et la parti du fichier testfonction.c n'apparait pas !

Voila, bon vous trouverez sans doute ma question un peu stupide, mais c'est parceque je debute, donc soyez indulgents, et merci d'avance pour vos reponses ;)

4 réponses

Messages postés
406
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
43
Bon alors deja, un fichier .h ne doit pas te servir pour coder tes fonctions, cela te sers a connaitre le prototype de ce qui est present dans ton .c.
Dans ton .h ne se trouve donc que des declarations (de fonctions, de structures, de constantes etc)
Dans ton .c se trouve le code.

Ceci etant dit, quand tu vas compiler tes fichiers, des fichiers objets vont se creer pour chaque .c et vont tous se regrouper dans un fichier executable pour donner ton programme.

Le point d'entree de ton programme est la fonction main.
Donc lors de l'execution, main() est appelee en premier.
Ainsi:

int nombreEntre=0, nombreQuintuple=0;

Tu crees 2 variables

    printf("dis un nombre\n");

Tu ecris "dis un nombre" sur la sortie standard

    scanf("%d", &nombreEntre);

Tu attends que l'utilisateur ecrive un nombre sur l'entree standard

    nombreQuintuple=quintuple(nombreEntre);

Tu affectes le resultat de la fonction quintuple(nombreEntre) a ta variable. Grace au import "main.h" tu sais que cette fonction existe.

    printf("le quintuple de ce nombre est %d", nombreQuintuple);

Tu ecris sur la sortie stantard "le quintuple de ce nombre est" et le contenu de ta variable

    return 0;


Tu sors de la fonction main (donc du programme) en renvoyant 0 (qui est la valeur de retour de ton programme, generalement 0 veut dire que tout s'est bien passe)
Messages postés
406
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
43
Pour repondre a la deuxieme partie de ta question, tu vois bien que ton programme ne fait JAMAIS appel a la fonction "bonjour()" presente dans testfonction.c

En fait, tu as a ta disposition la fonction "bonjour()" (a la seule condition de faire un import "testfonction.c"), mais ici tu ne t'en sers pas dans ton programme, donc elle sera jamais appelee.

Si tu veux juste avant le "return 0;", tu peux ecrire "bonjour();" (n'oublies pas de rajouter #import "testfonction.c")

Mais la encore il serait preferable de definir le protoype de la fonction bonjour dans un testfonction.h et d'en ecrire le code dans le testfonction.c. Comme ca tu fais import "testfonction.h", car on ne fait jamais d'import de .c

Et Hello s'affichera avant que le programme se finisse
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 104
Bonjour,
La fonction Main s'exécute à l'ouverture de l'appli (ou à la compilation)
Les autre fonctions doivent être appelées.
Ajoute bonjour() juste en première ligne de Main.
A+
Merci a vous pour vos reponses, mais j'avais justement fini par trouve la solution juste avant que vous ne repondiez, et j'ai compris en effet qu'il fallait faire appel a ma fonction bonjour dans le main, mais je nai pas eu besoin de #import...

Et merci pour le conseil en ce qui s'agit de seulement declarer les fonctions dans les .h, car je debute, et la je suis un peu perdu ...