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

Eclipse C & C++ Discussion :

Eclipse pense à une syntax error avec un typedef opaque


Sujet :

Eclipse C & C++

  1. #1
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut Eclipse pense à une syntax error avec un typedef opaque
    Bonjour à tous,

    J'ai un petit problème avec Eclipse CDT et l'analyse de syntaxe que CDT réalise pour un programme en C.

    Il est commun d'utiliser un pointeur opaque lorsqu'on veut cacher la structure utilisée dans une API.
    Je vous donne un exemple:

    fichier list.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef struct _list list; /* pointeur opaque, la structure 
                                     est définie dans le .c */
     
    /* ces fonction sont soulignées 
        "syntax error" car CDT ne connait
        pas encore "struct _list" et par 
        extension, le type "list" */
    list *create_list( void ); 
    int   next_data( list *pList );
    fichier list.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "list.h"
     
     
    struct _list {
        int id;
        [...]
    };
    Mon problème est que CDT n'interprète pas correctement le typedef car la structure à laquelle il fait référence n'est pas encore définie.
    Toutes les fonctions qui sont déclarées dans le header et qui utilisent ce typedef sont soulignées en jaune "syntax error" (l'analyseur syntaxique de CDT pense que la structure n'existe pas) alors qu'à la compilation tout se passe bien, évidemment (et le programme fonctionne sans problème).

    Une solution?

  2. #2
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut
    En ajoutant une déclaration de la structure sans la définir juste avant, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    struct _list; /* ajouté */
    typedef struct _list list; /* pointeur opaque, la structure 
                                     est définie dans le .c */
     
    /* ces fonction sont soulignées 
        "syntax error" car CDT ne connait
        pas encore "struct _list" et par 
        extension, le type "list" */
    list *create_list( void ); 
    int   next_data( list *pList );
    Eh bien rien ne change...

  3. #3
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    Bonjour,

    CDT n'est qu'une interface graphique, s'il y a des problèmes avec le compilateur, il faudrait indiquer l'erreur, et si possible dans le forum dédié au compilateur qui pose problème (gcc 3, 4, mingw, compilateur microsoft, intel, etc)

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

  4. #4
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut
    Mais justement, l'analyse syntaxique du code qui est présenté dans Eclipse est réalisée par Eclipse, et non pas par le compilateur. L'analyse syntaxique n'est réalisée par le compilo qu'à la compilation.

    Ce n'est donc pas un problème de compilateur, mais un problème d'Eclipse (et plus particulièrement le module CDT, qui gère tout ce qui est relatif au C).

    Je me rends compte que mon premier post n'est pas clair, je vais l'éditer.
    D'ailleurs, je peux répondre à ta question: le compilateur ne sort aucune erreur; c'est simplement Eclipse qui souligne certaines fonctions comme "erreurs syntaxiques" sans aucune raison.

  5. #5
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    L'analyse syntaxique est faite par le compilateur. CDT ne fait que parser la sortie du compilateur

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

  6. #6
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut
    J'insiste: la compilation ne fait ressortir aucune erreur de syntaxe (d'ailleurs je compile en mode Wall et Werror, chaque warning arrête la compilation).
    Je pense que c'est l'analyse d'Eclipse qui perd les pédales, et je ne sais pas comment remédier à ce problème.

  7. #7
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    Il faut dans l'onglet "builder setting" des options de ton projet s'il n'utilise le compilateur interne. Et sinon, voir quel parser d'erreur il utilise.

    Et sinon je sèche... du moins avec aussi peu de détails (os, compilateur, type de projet, copie de l'erreur, etc ..)

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

Discussions similaires

  1. Syntax error avec jQuery
    Par nicko_73 dans le forum jQuery
    Réponses: 5
    Dernier message: 23/10/2009, 09h23
  2. Réponses: 0
    Dernier message: 06/08/2008, 11h44
  3. Syntax error avec un script KSH
    Par Neuromancien2 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 19/05/2008, 16h44
  4. VBS syntax error avec la fonction PivotCache d'Excel
    Par speedking78 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2008, 14h44
  5. [INNER JOIN] Pourquoi ai-je une syntax error ?
    Par ricil78 dans le forum Accès aux données
    Réponses: 9
    Dernier message: 04/08/2006, 11h18

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