langage C : problème avec une structure (très simple)
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

langage C : problème avec une structure (très simple)



  1. #1
    cosmoff

    langage C : problème avec une structure (très simple)


    ------

    bonjour,

    voila j'ai crée un fichier main.c et un autre personnage.h

    dans mon fichier personnage.h il y a :
    Code:
    struct personnage {
        int Attaque;
        int Defense;
        int Chance;
    };
    et dans mon main.c :
    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include "personnage.h"
    
    int main() {
        
        // creation de personnages
        struct personnage ryu;
    
        ryu.Attaque = 50;
        ryu.Defense = 50;
        ryu.Chance = 70;
    Le probleme est que ca me met des erreurs lors de la compilation, en faite le probleme est l'absence de define dans mon fichier personnage.h, j'ai donc corriger l'erreur avec :
    Code:
    #ifndef PERSONNAGE_H
    #define PERSONNAGE_H
    
    struct personnage {
        int Attaque;
        int Defense;
        int Chance;
        
    };
    #endif
    et ca marche tres bien, mais je ne comprend pas pourquoi ca ne marchait pas quelqu'un peut il me l'expliquer ?

    merci d'avance

    -----

  2. #2
    lou_ibmix_xi

    Re : langage C : problème avec une structure (très simple)

    C'est une bonne idée de protéger les entêtes avec la danse "#ifndef / #define", mais ce n'est pas ça qui t'empêchait de compiler, tu as du également modifier autre chose entre temps...
    Quel est le compilateur que tu utilises, quel était le message d'erreur .
    Dernière modification par JPL ; 21/12/2015 à 23h33. Motif: Correction du titre

  3. #3
    cosmoff

    Re : langage C : problème avec une structure (très simple)

    dsl de te répondre seulement maintenant,

    tu as raison, le probleme vient enfaite car j'ajoute dans mon main : #include "affichage.c"
    et je ne comprend pas d'ou vient le probleme car le fichier affichage.c contient rien a part #include "affichage.h" et j'ai juste mis dans le fichier affichage.h : #include "personnage.h"

  4. #4
    cosmoff

    Re : langage C : problème avec une structure (très simple)

    Le message d'erreur est redéfinition of 'struct personnage'

  5. A voir en vidéo sur Futura
  6. #5
    lou_ibmix_xi

    Re : langage C : problème avec une structure (très simple)

    Le message d'erreur est redéfinition of 'struct personnage'
    Ceci explique cela, avec ta tambouille d'include, tu incluais 2 fois la même entête, donc tu redéfinissais une structure déjà définie (même si c'est avec le même contenu). Une fois que tu as protégé ton entête, la déclaration de la structure n'était faîte qu'une seule fois, la deuxième inclusion étant court-circuitée par le "#ifndef PERSONNAGE_H"

    De manière général, une entête doit être la "documentation" du code source .c correspondant (l'implémentation), ce qui veut dire qu'en pratique une entête ne contient pas de code (ni de définition) mais que des déclarations, et donc on n'inclue jamais de fichier c mais que des fichiers h. Il y a, comme à toutes règles des exceptions mais pour des cas assez précis qu'on ne croise pas tout les jours...

    Enfin je ne comprends pas pourquoi tu fais un fichier c ne contenant qu'un include, pourquoi ne pas avoir inclue le fichier h directement ? Qu'avais tu en tête ? C'est pas sympa d'embêter les préprocesseurs...

  7. #6
    cosmoff

    Re : langage C : problème avec une structure (très simple)

    en faite mon fichier affichage.c contiendra plusieurs fonctions d'affichage que je n'ai pas encore fait. Je voulais donc savoir d'ou venait le probleme avant d'avancer plus loin dans le code

    donc si j'ai bien compris dans mon fichier main.c je ne met que des include .c, et dans mes fichiers .c je ne met que des include .h contenant les prototypes de mes fonctions, c'est bien ca ?

  8. #7
    Bluedeep

    Re : langage C : problème avec une structure (très simple)

    Citation Envoyé par cosmoff Voir le message
    donc si j'ai bien compris dans mon fichier main.c je ne met que des include .c
    Non.
    Relisez la réponse de lou_ibmix_xi.

  9. #8
    cosmoff

    Re : langage C : problème avec une structure (très simple)

    Ok mais si je met dans mon main.c que des include fichier.h alors mon fichier main possedera les prototypes mais il ne connaitra pas les fonctions dans mes différents main...

  10. #9
    pm42

    Re : langage C : problème avec une structure (très simple)

    Non parce que tu compilera les autres .c avant de créer le programme global avec tous les .o.
    N'importe quel livre, tutoriel ou cours explique cela.

  11. #10
    lou_ibmix_xi

    Re : langage C : problème avec une structure (très simple)

    Il faut que tu fasses la différence entre déclaration (.h) et définition (.c), compilation (un fichier c -> une unité objet) et édition de lien (rassembler tes objets en un programme exécutable). Je te conseille d'éviter les IDE et de compiler "à la main" (écrire ton makefile) pour comprendre un peu le processus de compilation édition de lien.

  12. #11
    CM63

    Re : langage C : problème avec une structure (très simple)

    Bonjour,
    Citation Envoyé par cosmoff Voir le message
    Ok mais si je met dans mon main.c que des include fichier.h alors mon fichier main possedera les prototypes mais il ne connaitra pas les fonctions dans mes différents main...
    La connaissance des fonctions par le main se fera au moment du link, de "l'édition de lien". Donc , non , pas d'include de .c dans les .c, uniquement des includes de .h .

  13. #12
    cosmoff

    Re : langage C : problème avec une structure (très simple)

    ok j'ai compris, merci beaucoup

Discussions similaires

  1. Probleme tres simple dont la solution m'echappe
    Par invite7a24023c dans le forum Mathématiques du collège et du lycée
    Réponses: 5
    Dernier message: 25/02/2012, 20h37
  2. Problème très simple et très rapide!
    Par invite300720ae dans le forum Science ludique : la science en s'amusant
    Réponses: 16
    Dernier message: 16/10/2011, 14h35
  3. Matlab: problème très simple
    Par inviteb146ac72 dans le forum Physique
    Réponses: 1
    Dernier message: 25/10/2010, 18h40
  4. Probleme sûrement très simple sur solubilité
    Par invitefbb2cc7d dans le forum Chimie
    Réponses: 7
    Dernier message: 14/11/2006, 15h51
  5. Problème Langage C Structure, Pointeur, ...
    Par invite3e43df7f dans le forum Logiciel - Software - Open Source
    Réponses: 17
    Dernier message: 01/04/2006, 20h14