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 :

.h et structure


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut .h et structure
    Bonjour,
    J'ai déclarer une structure et une fonction dans mon .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "D:\banque\Client.h"
    #ifndef __CLIENT__
    #define __CLIENT__
    #define CAPACITE 20000
     
    typedef struct
    {
        Client liste[CAPACITE];
        int taille;
    }listeClient;
     
    listeClient* creerlisteClient(void);
    #endif
    Puis dans le .c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "D:\banque\listeClient.h"
    listeClient* creerlisteClient()
    {
        listeClient *c;
       ...
        return c;
    }
    Dès la seconde ligne j'ai une erreur de compilation : D:\Banque\listeClient.c|2|error: expected declaration specifiers or '...' before 'listeClient'|
    Je ne vois vraiment pas ou se trouve le problème, j'ai essayer d'enlever (void) ou de le rajouter rien. Voila maintenant 1h que je tourne en rond.
    Merci de votre aide.

  2. #2
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour myred

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "D:\banque\Client.h"
    fait attention au "\" , c'est un code de contrôle dans les chaines de caractères, le chemin que tu donne n'est pas celui que tu crois donner.

    De plus on ne met jamais un chemin absolu pour un include, c'est moche, même très très moche. Si ton include n'est pas dans le répertoire courant, ton compilateur te permet de redéfinir des path supplémentaires pour les includes.

    A+
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Merci de ta réponse rapide. J'utilise la bibliothèque GTK+, ce qui me force a mettre des chemins absolus -_- ce n'est pas propre, cependant il trouve bien mon header vu qu'il reconnaît ma structure. Je vais essayer de redéfinir des PATH.
    J'ai essayé de changer le chemin du fichier header pour le mettre directement au bon endroit, cependant le problème reste le même.
    "D:\Banque\listeClient.c|2|error: expected declaration specifiers or '...' before 'listeClient'|"

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Salut,

    ce que t'explique bpy1401 c'est qu'au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "D:\banque\Client.h"
    il faudrait écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "D:\\banque\\Client.h"
    car sinon \b et \C peuvent se faire interpréter autrement. Enfin je pense que c'en est un cause, car je ne connais pas bien les spécificité des compilo sur Windows ... il y a peut-être une exception pour les chaînes des includes ?

    Pour éviter d'utiliser des chemins en dur dans les includes, tu peux te référer à la doc de ton compilo, il doit permettre via une option IDE ou CLI (généralement -I ou /I) de donner une liste de chemins à parcourir pour trouver les includes.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Comme dit précédemment, je conseille de rajouter un dossier d'inclusion, dans les propriétés de votre projet (ou comme paramètre à votre compilateur). Ainsi, plus besoin d'écrire le chemin absolu du fichier et donc, votre code source devient plus libre (exportable / copiable / réutilisable).

    De plus, je conseille une écriture avec les '/'. Car même s'il fut un temps ou Microsoft obligé les '\', ce temps est résolu. Ainsi, pour qu'il y ai moins de problème avec d'autres compilateurs / systèmes, le '/' est conseillé.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Bonjour,
    J'ai réussi à faire reconnaitre au compilateur le fichier header rien qu'en mettant Client.h.
    Cependant j'ai toujours la même erreur -_-

  7. #7
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour

    Tu peux nous mettre aussi Client.h

    merci
    Page sur Developpez : http://pbriand.developpez.com

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    J'ai résolu le problème. Je ne sais pas trop comment.
    Merci de votre aide !
    Bonne journée

  9. #9
    Membre habitué
    Profil pro
    amateur
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Salut,

    ce que t'explique bpy1401 c'est qu'au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "D:\banque\Client.h"
    il faudrait écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "D:\\banque\\Client.h"
    car sinon \b et \C peuvent se faire interpréter autrement. Enfin je pense que c'en est un cause, car je ne connais pas bien les spécificité des compilo sur Windows ... il y a peut-être une exception pour les chaînes des includes ?
    .
    Il me semble avoir lu dans la doc du préprocesseur C (cpp) que les noms/chemins de fichiers à inclure ne sont pas interprétés (d'ailleurs c'est logique, l'include se passe avant le décodage "linguistique" proprement dit ; même si cpp fait la tokenisation, il doit s'arrêter là).

    PS:
    @myred : ce serait bien de savoir pourquoi (ton problème est résolu), non? Pour toi et pour les autres, d'ailleurs.


    Denis

  10. #10
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par denispir Voir le message
    Il me semble avoir lu dans la doc du préprocesseur C (cpp) que les noms/chemins de fichiers à inclure ne sont pas interprétés (d'ailleurs c'est logiqe, l'include se passe avant le décodage "linguistique" proprement dit ; même si cpp fait la tokenisation, il doit s'arrêter là).

    Denis
    Ah oui, tu as raison. Je viens de consulter la doc cpp (version GNU) et il est stipulé :
    However, if backslashes occur within file, they are considered ordinary text characters, not escape characters. None of the character escape sequences appropriate to string constants in C are processed. Thus, #include "x\n\\y" specifies a filename containing three backslashes. (Some systems interpret ‘\’ as a pathname separator. All of these also interpret ‘/’ the same way. It is most portable to use only ‘/’.)
    Maintenant il faudrait connaître le comportement du compilo utilisé par le PO.

  11. #11
    Membre habitué
    Profil pro
    amateur
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Ah oui, tu as raison. Je viens de consulter la doc cpp (version GNU) et il est stipulé :

    However, if backslashes occur within file, they are considered ordinary text characters, not escape characters. None of the character escape sequences appropriate to string constants in C are processed. Thus, #include "x\n\\y" specifies a filename containing three backslashes. (Some systems interpret ‘\’ as a pathname separator. All of these also interpret ‘/’ the same way. It is most portable to use only ‘/’.)
    Maintenant il faudrait connaître le comportement du compilo utilisé par le PO.
    La question est aussi de savoir quelle part, dans le comportement de cpp sur ce point et d'autres, est juste application de la norme C ou décision de leur part (qui me semble correcte dans ce cas).

    denis

  12. #12
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par denispir Voir le message
    La question est aussi de savoir quelle part, dans le comportement de cpp sur ce point et d'autres, est juste application de la norme C ou décision de leur part (qui me semble correcte dans ce cas).

    denis
    En fait la norme c99 précise en 6.4.7, à partir du verset 2:

    2 The sequences in both forms of header names are mapped in an implementation-defined manner to headers or external source file names as specified in 6.10.2

    3 If the characters ', \, ", //, or /* occur in the sequence between the < and > delimiters, the behavior is undefined. Similarly, if the characters ', \, //, or /* occur in the sequence between the " delimiters, the behavior is undefined.(69) A header name preprocessing token is recognized only within a #include preprocessing directive.

    ....

    (69 Thus, sequences of characters that resemble escape sequences cause undefined behavior.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  2. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  3. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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