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 :

empecher la compilation de façon conditionnelle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut empecher la compilation de façon conditionnelle
    Bonjour.

    Dans mon code, j'ai 2 typedef enum. un contient X éléments, et le second X+1.
    Exempl:
    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
     
    typedef enum
    {
        toto1=0,
        toto2,
        toto3,
        num_toto
    }Ttoto;
     
    typedef enum
    {
        tata1=0,
        tata2,
        tata3,
        tata4,
        num_tata
    }Ttata;
    Et tenez-vous bien, il FAUT que le deuxième contienne exactement 1 élément de plus que le premier. Sinon, ça va compiler, ça va s'executer, mais pas correctement!

    Ce que je voudrais, c'est que si un jour quelqu'un s'amuse à rajouter un toto4, ça ne compile plus si il oublie de rajouter un tata5!

    un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #if ( num_tata != (num_toto +1) )
    #error Ttata should contain 1 element more than Ttoto
    #endif
    le problème c'est que num_tata et num_toto ne sont pas connu à la pré-compilation!

    Existe-t'il un moyen simple et efficace de faire ça?
    merci

    Biosox

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Mettre un commentaire de façon à l'expliciter ?

    Le contrôler à l'execution et bloquer le déroulement du programme si la condition n'est pas remplie ?

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void RevoyezVotreCopie(struct { char x[(num_tata == num_toto+1)*2-1];});

  4. #4
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut
    SUPERBE!

    j'y avais pas pensé. C'est tout simplement génial!

    Mais euh... questions:
    ça ne suffirait pas de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void RevoyezVotreCopie(char x[(num_tata == num_toto+1)*2-1]);
    on vire le "struct".
    A moins qu'une subtilité m'échappe?

    merci

  5. #5
    mat.M
    Invité(e)
    Par défaut
    Ce que je voudrais, c'est que si un jour quelqu'un s'amuse à rajouter un toto4, ça ne compile plus si il oublie de rajouter un tata5!
    Il faudrait que tu aies des notions avancées d'algorithmie.
    On peut faire ça de manière + souple avec des listes chainées plutot que ce genre de bricolage...

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par mat.M
    Il faudrait que tu aies des notions avancées d'algorithmie.
    On peut faire ça de manière + souple avec des listes chainées plutot que ce genre de bricolage...
    A quoi tu penses? On sait juste qu'il faut que deux enums soient synchronises, sans savoir d'ou ils viennent. Je ne vois pas un probleme d'algorithmique la-dedans, je ne vois pas en quoi des listes chainees pourraient intervenir. Il y a peut-etre une meilleure maniere d'organiser le code, mais on ne connait pas assez le contexte pour proposer quelque chose.

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Biosox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void RevoyezVotreCopie(char x[(num_tata == num_toto+1)*2-1]);
    on vire le "struct".
    A moins qu'une subtilité m'échappe?
    Possible. J'aime pas trop les tailles dans les prototypes, ca ne signifie rien et je n'ai pas le temps de verifier les contraintes qu'il y a dessus.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/06/2013, 16h58
  2. Erreur empechant la compilation de mon projet silverlight 4
    Par maxwel56 dans le forum Silverlight
    Réponses: 4
    Dernier message: 20/01/2010, 16h44
  3. Probleme d'accent qui empeche la compilation
    Par Balbuzard dans le forum Débuter
    Réponses: 13
    Dernier message: 09/05/2009, 14h39
  4. [CR XI] Masquer un champ de façon conditionnelle
    Par barbarian9 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 03/03/2008, 10h30
  5. [CODE] Compilation conditionnelle ?
    Par Cornell dans le forum Langage
    Réponses: 3
    Dernier message: 16/09/2003, 18h16

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