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 :

[pre processor] fonctionnement d'une commande dans un header


Sujet :

C++

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 27
    Points
    27
    Par défaut [pre processor] fonctionnement d'une commande dans un header
    Salut !

    J'ai un header de ce style :

    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
     
    #if !defined( EXAMPLE_H )
    #define EXAMPLE_H
    #define _BOB
     
    class Example
    {
     
    protected: ...
    public:
    #ifndef _BOB
    coco();
    #endif
     
    private:
    #ifdef _BOB
    coco();
    #endif
    };
    #endif // !defined( EXAMPLE_H )
    Et mon problème c'est que les commande #ifndef et #ifdef ne mettent pas en gris les bout de code où j'ai appliqué une condition.
    --> Est-il possible de faire ce que j'ai fait ou pas? à savoir mettre une condition pour que la fonction coco() soit dans la partie private ou dans la partie public de la classe (selon la condition).

    Merci

  2. #2
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Points : 151
    Points
    151
    Par défaut
    Bien sur que tu peux mettre des preconditions ou tu veux, a condition que la syntaxe du langage soit respectee.

    exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #ifdef __cplusplus
    extern "C"
    {
    #endif /* __cplusplus */
       typedef AiReturn _API_ISR_FUNC FDX_SERVER_CALLBACK_FUNC(   const AiChar *  /* ac_SrvName */,
                                                    const AiUInt32                /* ul_ChangeType */,
                                                    TY_RESOURCE_LIST_ELEMENT *    /* px_ResourceList */);
    #ifdef __cplusplus
    }
    #endif /* __cplusplus */

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Ok mais le truc c'est que dans l'exemple que j'ai mis dans mon premier message, aucune des condition n'est grisée alors qu'il devrais y en avoir une qui doit être grisé non?

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Points : 151
    Points
    151
    Par défaut
    Ca depend de ton editeur...

    Visual de temps en temps est un peu capricieux et ne grise pas la bonne partie, donc pas de souci pour ca tant que ca compile sans erreurs ni warnings et que ca fait ce que tu veux....

  5. #5
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Points : 151
    Points
    151
    Par défaut
    Par contre, preferes la syntaxe suivante:

    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
    #if !defined( EXAMPLE_H )
    #define EXAMPLE_H
    #define _BOB
     
    class Example
    {
     
    protected: ...
    #ifndef _BOB
    public:
    coco();
    #endif
     
    #ifdef _BOB
    private:
    coco();
    #endif
    };
    #endif // !defined( EXAMPLE_H )

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Pardonnez ma curiosité, mais je ne parviens pas à entrevoir l'utilité de ce hack. A première vue, j'y vois un trés gros inconvénient, c'est que l'utilisateur de ta classe sera contraint de connaître ce hack et de définir des variables. Et l'utilisation de ta classe risque de s'avérer épineuse.

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    oui alors en fait j'effectue des tests sur un fichier lib et ma dll de test a besoin d'avoir acces a certaines fonction du fichier lib qui sont déclarer en private. Il me faut donc passer celle-ci en public lorsque je serai en phase de test.

    L'idée etait d'ajouter une macro dans les options du compilo et le tour est joué... mais bon je sais pas pourquoi visual n'apprécie pas trop que je fasse ca pour mon fichier .h alors que ca marche bien pôur le fichier cpp...

    Merci pour tes éclairs nikau2

    et j'espère que j'ai été assez clair dans mon explication r0d

  8. #8
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Ok je vois. Et à bien y réfléchir, je ne trouve pas de meilleure façon de faire que ce que tu as fais.

    En ce qui concerne la coloration syntaxique, c'est clair que visual est souvent "dans les choux", donc si ton code fonctionne, je ne penses pas qu'il soit utile de s'attarder là-dessus.

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    oui et j'ajouterais avant de clore le topic que ma dll de test a aussi besoin de la macro que j'utilise dans le fichier que je teste... car je fais appel à un .h utilisant la macro conditionnel.

    SOLUTION ==> Il faut ajouter les macros dans le projet si vous faite appel au .h d'un autre projet qui utilise des macros conditionnel ...

    c'était un peu subtil et cela ma couté une matinée :p

    merci et bonne journée !

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

Discussions similaires

  1. Exécution d'une commande dans un Trigger
    Par Perr1 dans le forum Oracle
    Réponses: 6
    Dernier message: 08/04/2006, 01h14
  2. Ajouter une commande dans le menu contextuel
    Par Tenguryu dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/04/2006, 13h43
  3. une commande dans un backquote
    Par Krispy dans le forum Langage
    Réponses: 4
    Dernier message: 30/03/2006, 15h45
  4. Réponses: 7
    Dernier message: 05/10/2005, 19h06
  5. Ecrire le résultat d'une commande dans un fichier de l' OS
    Par Labienus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/02/2004, 12h04

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