IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

compilation séparée .h et .c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de clampin
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 96
    Par défaut compilation séparée .h et .c
    Bonjour,

    Avant d'aller plus loin dans mon apprentissage, je pensait que ce serait plus simple pour moi d'avoir les fichiers .h et .c séparé.

    Alors j'ai repris un fichier d'affichage de menu qui marche bien en 1 seul fichier pour voir comment faire en programmation modulaire.

    dans mon main.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    /* Logiciel de compta perso */
     
    #include <stdio.h>
    #include <stdlib.h>
    #include "menu.h"
     
    #define DELAY 150000
     
    void delay(void);
     
     
    int main(void)
    {
    	int choix;
     
    	while(1);
    	{
    		/* Branchement effectué en fontion du choix de de l'utilisateur */
    		switch(choix = menu())
    		{
    			case 1:
    			{
    				puts("\nExécution du choix 1.");
    				delay();
    				break;
    			}
    			case 2:
    			{
    				puts("\nExécution du choix 2.");
    				delay();
    				break;
    			}
    			case 3:
    			{
    				puts("\nExécution du choix 3.");
    				delay();
    				break;
    			}
    			case 4:
    			{
    				puts("\nExécution du choix 4.");
    				delay();
    				break;
    			}
    			case 5:
    			{
    				puts("\nExécution du choix 5.");
    				delay();
    				exit(0);
    			}
    			default:
    			{
    				puts("\nChoix incorrect, choisissez un autre\n");
    				delay();
    			}
    		}
    	}
    	return 0;
    }
     
     
    void delay(void)
    {
    	long x;
    	for (x = 0; x < DELAY; x++)
    		;
    }
    dans mon menu.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #include "menu.h"
     
    int menu(void)
    {
      int reponse;
     
      puts("Le menu\n");
      puts("\nEntres 1 pour exécuter la tâche A.");
      puts("\nEntrez 2 pour exécuter la tâche B.");
      puts("\nEntrez 3 pour exécuter la tâche C.");
      puts("\nEntrez 4 pour exécuter la tâche D.");
      puts("\nEntrez 5 pour sortir du programme.");
     
      scanf("%d", &reponse);
     
      return reponse;
     
    }
    Et enfin mon menu.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /* définition du menu */
     
    int menu(void);
     
    /* fin de définition du menu */
    et je compile mon programme avec la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -Wall main.c menu.c -o compta
    Qu'est-ce que je fais encore mal ?

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Tu dois encore rajouter des gardes d'inclusion multiple dans ton fichier d'en-tête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef H_TC_MENU_20071003211822
    #define H_TC_MENU_20071003211822
     
    /* définition du menu */
     
    int menu(void);
     
    /* fin de définition du menu */
     
    #endif /* guard H_TC_MENU_20071003211822 */
    Pour la compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gcc -Wall -Wextra -Wwrite-strings -ansi -pedantic -o main.o -c main.c
    gcc -Wall -Wextra -Wwrite-strings -ansi -pedantic -o menu.o -c menu.c
    gcc -o mon_programme main.o main.c
    Lorsque le nombre de fichiers devient important, il devient très vite intéressant d'apprendre à utiliser des outils comme make ou scons pour automatiser le processus de compilation.

    Enfin, pour en savoir plus sur la manière de bien organiser son code source et son développement: http://emmanuel-delahaye.developpez....ganiser_source

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    C'est plutot bien parti.. Cependant meme si tu as fait plusieurs modules, ce n'est pas de la "compilation separée" puisque tu compiles les 2 modules en meme temps.
    Pour compiler un module separement c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -c module.c -o module.o
    Pour creer un executable à partir de modules compilés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc module.o module2.o main.o -o executable
    Biensur les Makefiles automatisent cela

Discussions similaires

  1. Compilation séparée ?
    Par kromartien dans le forum C
    Réponses: 8
    Dernier message: 22/04/2007, 10h41
  2. Compilation séparée avec devc++
    Par javamax dans le forum Dev-C++
    Réponses: 6
    Dernier message: 08/02/2007, 18h56
  3. Compilation séparée
    Par oliv928 dans le forum Dev-C++
    Réponses: 6
    Dernier message: 02/01/2007, 17h41
  4. Compilation séparée sous devcpp
    Par Mic75 dans le forum Dev-C++
    Réponses: 1
    Dernier message: 23/08/2006, 15h33
  5. Compilation séparée avec dev C/C++
    Par benjiprog dans le forum Dev-C++
    Réponses: 5
    Dernier message: 07/11/2005, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo