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 :

Faire un lien en un .c et un .h


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 42
    Points
    42
    Par défaut Faire un lien en un .c et un .h
    Bonjour,
    J'aimerai bien diviser mon fichier .c en plusieurs .c et .h.
    (Juste je suis sous Windows 10 et j'utilise sois Visual Studio Code ou soit Dev C++.)

    Pour cela, j'ai mis tout mon affichage dans un .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
     
    #include "affichage.h"
     
    void affichage_smiley_triste(){
     
        go(20,7);printf(".-''''''-.");
        go(21,5);printf(".'          '.");
        go(22,4);printf("/   O      O   \\");
        go(23,3);printf(":           `    :");
        go(24,3);printf("|           `    |");
        go(25,3);printf(":    .------.    :");
        go(26,4);printf("\\  '        '  /");
        go(27,5);printf("'.          .'");
        go(28,7);printf("'-......-'");    
    }
    Et j'ai mis dans mon .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #ifndef _Affichage_H
    #define _Affichage_H
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    void affichage_smiley_triste();
     
    #endif
    J'ai donc dans mon main.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    #include "affichage.h"
     
    BlaBlaBla
    Cependant, quand je veux compiler, une erreur apparait qui me dit : undefined reference to `affichage_smiley_triste'
    Je pense qu'il y a un problème de lien mais je ne vois pas comment en faire de plus que les include que je viens de faire ...
    Merci d'avance
    Bapth

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 584
    Points : 7 721
    Points
    7 721
    Par défaut
    Bonjour,

    Tu l'as écris, c'est un problème d'édition des liens. L'édition des liens c'est le moment où tous les fichiers qui ont été compilés (donc ici les 2 fichiers main.c et l'autre fichier .c) et où tout est relié. Si quelque chose manque à l'appel il y a problème. Dans ton projet, il faut bien indiquer les 2 fichiers à compiler.

    Fais attention à l'utilisation des includes, on doit mettre ce dont le code du fichier à besoin en évitant d'en mettre plus surtout pour les fichiers d'entête. Ton fichier .h n'a besoin de rien pour lui donc pas d'include
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef AFFICHAGE_H_
    #define AFFICHAGE_H_
     
    void affichage_smiley_triste(void); // on indique que la fonction ne reçoit pas de paramètre
     
    #endif
    Ton fichier .c lui doit inclure ce dont il a besoin et aussi les services qu'il fournit c-à-d:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "affichage.h"    // pour affichage_smiley_triste()
    #include <stdio.h>        // pour printf()
    #include <include pour avoir la fonction go() que je ne connais pas>

  3. #3
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 665
    Points : 1 694
    Points
    1 694
    Par défaut
    Hello,

    À la ligne 2 (premier code), il y a un espace entre affichage et .h

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 726
    Points : 31 046
    Points
    31 046
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par bapth Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void affichage_smiley_triste(){
     
        go(20,7);printf(".-''''''-.");
        go(21,5);printf(".'          '.");
        go(22,4);printf("/   O      O   \\");
        go(23,3);printf(":           `    :");
        go(24,3);printf("|           `    |");
        go(25,3);printf(":    .------.    :");
        go(26,4);printf("\\  '        '  /");
        go(27,5);printf("'.          .'");
        go(28,7);printf("'-......-'");    
    }
    Remplace tes printf(...) par fputs(..., stdout). Ca ne règlera pas ton souci de compilation (qui a été expliqué par dalfab) mais ça accélèrera ton code (enfin quand tu auras réussi à le compiler). printf est une fonction plus lourde que fputs (elle même plus lourde que fputc qui aurait alors été à privilégier si tu n'avais qu'un caractère à afficher). Donc quand tu n'as pas besoin des spécificités de printf, autant éviter de l'utiliser.
    Et que tu gardes printf ou que tu utilises fputs, je pense qu'un fflush(stdout) en fin de fonction ne serait pas inutile (sinon l'affichage peut être gardé en mémoire et n'être réellement affiché à l'écran que bien plus tard).

  5. #5
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Hello,

    À la ligne 2 (premier code), il y a un espace entre affichage et .h
    Merci pour ta remarque j'ai mal recopié quand j'ai écris dans le forum. Quand j'ai vérifier dans mon programme, l'espace n'était pas présent.


    Sinon le go() est une fonction que j'ai faite qui me permet de positionner mon texte ou je le souhaite dans mon terminal en fonction de x et y.
    Mais même en mettant correctement les include, mon programme ne compile pas ...

    Sinon merci Sve@r je modifie ca

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 726
    Points : 31 046
    Points
    31 046
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bapth Voir le message
    Mais même en mettant correctement les include, mon programme ne compile pas ...
    La compilation se fait en 2 phases
    1. examen du source, contrôle de la syntaxe => création d'un module objet
    2. liaison de tous les objets entre eux pour générer l'exécutable

    Si ton #include est mal positionné, l'étape 1 ne se fera pas. Si le compilateur n'est pas au courant de tous les objets existants, l'étape 2 ne se fera pas (c'est ton cas).
    Il te faut indiquer à VS ou DevC++ que ton programme dépend du source qui contient le main et de "affichage.c" comme ça il pourra lier les objets entre eux. Ca s'appelle "compilation séparée". Tu dois avoir une doc qui explique comment faire.

Discussions similaires

  1. Réponses: 13
    Dernier message: 20/10/2005, 13h42
  2. [JDBC][Access] comment faire un lien avec la BD
    Par pmartin8 dans le forum JDBC
    Réponses: 4
    Dernier message: 19/10/2005, 14h35
  3. [Excel] Faire des liens internes à une feuille
    Par Invité dans le forum Excel
    Réponses: 1
    Dernier message: 25/08/2005, 12h04
  4. faire un lien vers un site avec un post en simultané
    Par zolive dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/08/2005, 10h07

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