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 :

Macros et typedef enum {MUR=0x1,etc. HELP !


Sujet :

C++

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Par défaut Macros et typedef enum {MUR=0x1,etc. HELP !
    Bonjour,
    Je suis en train d'essayer de comprendre un code préexistant, et je bloque sur un point.
    Le sujet général du code est la création d'un labyrinthe, et chaque case doit comporter une mention indiquant si on y es déjà passé ou non.
    Pour cela, le code indique :

    typedef enum { MUR_BAS = 0x1, MUR_DROITE = 0x2, PASSAGE = 0x4 } cell_state_t;

    puis des macros permettent d'agir sur les murs et le passage :


    #define INIT_MUR(pos) laby[pos] |= MUR_BAS | MUR_DROITE
    #define DETRUIRE_BAS(pos) laby[pos] &= ~MUR_BAS
    #define DETRUIRE_DROITE(pos) laby[pos] &= ~MUR_DROITE

    #define RESET_PASSAGE(pos) laby[pos] &= ~PASSAGE
    #define MARQUER_PASSAGE(pos) laby[pos] |= PASSAGE
    #define EST_MARQUE(pos) (laby[pos] & PASSAGE)

    avec typedef char cases; laby = new cases[(lg)*(lrg)];

    1)Si quelqu'un a l'explication des &= , |=, je veux bien car je n'ai rien trouvé sur le net

    2) plus important, j'aimerai bien comprendre le type de données que sont MUR_BAS, MUR_DROITE, PASSAGE et EST_MARQUE, car je pensais qu'il s'agissait plus ou moins de booléens mais ce genre d'instruction ne marche pas (le programme ne rentre pas dans le if lors de l'exécution même quand ça devrait) :
    if ( !EST_MARQUE(position-lg) ) { cout<<"haut"<<endl;}

    et cout<<!EST_MARQUE(position-lg); est refusé par le compilateur. Du coup j'ai un peu du mal à déboguer le code...

    Quels genre de tests faut-il donc faire pour savoir si on est déjà passé sur une case ou pas ?

    Un grand merci d'avance aux gentils babasseurs qui me répondront !

    Audrey.

    PS : je précise que je ne recherche pas de solutions alternatives à ce code (en passant par des structures, par exemple, c'est déjà fait !) mais que j'aimerai bien comprendre tout ça...

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Par défaut
    Salut,

    1/

    a |= b signifie a = a | b

    avec | qui veut dire "ou logique"

    a &= b signifie a = a & b

    avec & qui veut dire "et logique"

    2/MUR_BAS, MUR_DROITE, PASSAGE sont des valeur héxadécimales (commence par 0x)

    EST_MARQUE est une macro

    Pour savoir pourquoi tu n'entre pas dans le IF, il faudrait voir plus de code.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Par défaut
    merci.
    En gros lors de l'initialisation on tire une case au hasart (de position depart) et on fait
    MARQUER_PASSAGE(depart);
    puis on part sur le if.

    Sinon, dans l'exécution, dès qu'on relie une case A où on est déjà passés à une case B où on n'est pas encore passés (d'où le test), on fait MARQUER_PASSAGE(position de B);

    J'espère que ça suffit...

Discussions similaires

  1. typedef + enum
    Par Joe_Dupont dans le forum Débuter
    Réponses: 3
    Dernier message: 05/03/2012, 22h04
  2. TypeDef enum syntaxe.
    Par Noun-S dans le forum Langage
    Réponses: 0
    Dernier message: 12/05/2011, 11h40
  3. #define VS typedef enum
    Par Bktero dans le forum Débuter
    Réponses: 9
    Dernier message: 11/06/2010, 09h13
  4. [Debutant - 1er jour de C] Typedef enum
    Par kakou dans le forum C
    Réponses: 3
    Dernier message: 28/02/2006, 23h53
  5. [VBA-E] [help]macro pour dupliquer une feuille (en valeur)
    Par minikisskool dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 07/11/2005, 19h24

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