Menu

Probléme de lancement de programme lors de la compilation en C

-
Bonsoir,
je suis un débutant en C , j' utilise Code:Blocks comme IDE pour programmer en c , et je voulais programais une mini calculatrice pour mes premier lancement dans ce domaine , j'ai creer un fichier main.c et un autre cal.h(header) , j'ai bien ecrit le code quand on le débogue on trouve aucune erreur mais y on a une choses , quand je clique sur Build&Run il ne se passe rien , RIEN DU TOUU!! , il y a aucain message erreur et il y a aucune console qui se lance donc mon programe ne s'est pas lanceé , donc j'ai consulté ce site Web pour résoudre ce problème , vouliez m'aidez svp le plus tot possible , et Merci d'avance ????????

voici le code de compilation dans le main.c:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "cal.h"

int main()
{
    Menu();

    int op;
    scanf("%d", &op);

    switch(op)
    {
     case 1:
         sum();
       break;
     case 2:
         sub();
       break;
     case 3:
         mul();
       break;
     case 4:
         DIV();
       break;
     case 5:
         SIN();
       break;
     case 6:
         COS();
       break;
     case 7:
         TAN();
       break;
     case 8:
         POW();
       break;
     case 9:
         SQRT();
       break;
     default:
        printf("vouliez choisissez la bone operation\n");

    }



    return 0;
}




et voici le code de compilation dans le cal.h :


#ifndef CAL_H_INCLUDED
#define CAL_H_INCLUDED

void Menu()
{
 printf("les operations desponibles : \n");
 printf("1. +\n");
 printf("2. -\n");
 printf("3. *\n");
 printf("4. /\n");
 printf("5. sin\n");
 printf("6. cos\n");
 printf("7. tan\n");
 printf("8. pow\n");
 printf("9. sqrt\n");
 printf("choisissez l'operation");

}





#endif // CAL_H_INCLUDED
Afficher la suite 

Votre réponse

1 réponse

Messages postés
5047
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
16 avril 2019
929
0
Merci
Salut Nazimsh,

Voilà les messages d'erreur que devrait produire la tentative de compilation de ton code avec gcc (testé en ligne de commande sous Linux avec gcc 6.3.0) :

$ gcc -Wall main.c cal.h 
main.c: In function ‘main’:
main.c:16:4: warning: implicit declaration of function ‘sum’ [-Wimplicit-function-declaration]
    sum();
    ^~~
main.c:19:4: warning: implicit declaration of function ‘sub’ [-Wimplicit-function-declaration]
    sub();
    ^~~
main.c:22:4: warning: implicit declaration of function ‘mul’ [-Wimplicit-function-declaration]
    mul();
    ^~~
main.c:25:4: warning: implicit declaration of function ‘DIV’ [-Wimplicit-function-declaration]
    DIV();
    ^~~
main.c:28:4: warning: implicit declaration of function ‘SIN’ [-Wimplicit-function-declaration]
    SIN();
    ^~~
main.c:31:4: warning: implicit declaration of function ‘COS’ [-Wimplicit-function-declaration]
    COS();
    ^~~
main.c:34:4: warning: implicit declaration of function ‘TAN’ [-Wimplicit-function-declaration]
    TAN();
    ^~~
main.c:37:4: warning: implicit declaration of function ‘POW’ [-Wimplicit-function-declaration]
    POW();
    ^~~
main.c:40:4: warning: implicit declaration of function ‘SQRT’ [-Wimplicit-function-declaration]
    SQRT();
    ^~~~
cal.h: In function ‘Menu’:
cal.h:6:2: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
  printf("les operations desponibles : \n");
  ^~~~~~
cal.h:6:2: warning: incompatible implicit declaration of built-in function ‘printf’
cal.h:6:2: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
/tmp/ccP3j7fb.o : Dans la fonction « .L4 » :
main.c:(.text+0x12d) : référence indéfinie vers « sum »
/tmp/ccP3j7fb.o : Dans la fonction « .L6 » :
main.c:(.text+0x134) : référence indéfinie vers « sub »
/tmp/ccP3j7fb.o : Dans la fonction « .L7 » :
main.c:(.text+0x13b) : référence indéfinie vers « mul »
/tmp/ccP3j7fb.o : Dans la fonction « .L8 » :
main.c:(.text+0x142) : référence indéfinie vers « DIV »
/tmp/ccP3j7fb.o : Dans la fonction « .L9 » :
main.c:(.text+0x149) : référence indéfinie vers « SIN »
/tmp/ccP3j7fb.o : Dans la fonction « .L10 » :
main.c:(.text+0x150) : référence indéfinie vers « COS »
/tmp/ccP3j7fb.o : Dans la fonction « .L11 » :
main.c:(.text+0x157) : référence indéfinie vers « TAN »
/tmp/ccP3j7fb.o : Dans la fonction « .L12 » :
main.c:(.text+0x15e) : référence indéfinie vers « POW »
/tmp/ccP3j7fb.o : Dans la fonction « .L13 » :
main.c:(.text+0x165) : référence indéfinie vers « SQRT »
collect2: error: ld returned 1 exit status
$ 


Il est très étonnant que Codeblocks ne te fournisse aucun message d'erreur.

Fait
Build - Clean
, puis
Build - Rebuild
et fais un copier-coller du contenu intégral de l'onglet
Build log
en bas de ton interface.

Sinon, il y a pas mal de problèmes dans ton code, le plus visible étant que tu appelles des fonctions inexistantes, un autre étant que et que tu utilises un
.h
pour y mettre l'implémentation d'une fonction au lieu de te servir de cet entête
cal.h
seulement pour déclarer son prototype, en mettant l'implémentation dans un autre fichier
cal.c
. Si tu fais comme tu as fait, tu ne pourras pas utiliser la fonction dans plus d'un fichier source, ce qui n'est pas le but dans une approche modulaire de la programmation.

Pour t'aider à comprendre comment utiliser les .h, tu peux lire ce polycopié d'un professeur de l'Université du Michigan, David Kieras, que je trouve très clair :

http://umich.edu/~eecs381/handouts/CHeaderFileGuidelines.pdf

Dal
Commenter la réponse de [Dal]