CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

#define

Jarozse
Jarozse
Niveau 10
27 janvier 2005 à 19:12:36

Bonjour,

J´aimerais savoir pourquoi dans

  1. define SUPPR_EST(C) {C.mur &= 7;}

on utilise des {}

alors que dans

  1. define CEL_LIBRE(C) ( C.compteur == 0? 1:0)

on utilise des ( )

C.compteur est un int, C.mur un unsigned char.

Merci.

kufa
kufa
Niveau 9
27 janvier 2005 à 20:19:37

Par ce que ca fait pas la meme chose.
Je m explique de facon simplifiee: SUPPR_EST va faire une action, alors que CEL_LIBRE va renvoyer une valeur.

On mets des crochets lorsque on veut inserer du code, pour etre sur que ca fonctionne partout:

  1. define INFO printf( " hello\n" ) ; printf( " world\n")

. ..
if( toto ! = 5 )
INFO;

La, ca va remplacer la macro par:
if( toto ! = 5 )
printf( " hello\n" ) ; printf( " world\n");

Ce qui fait que " world" sera tjs afficher. Pour resoudre ce probleme, on rajoute des crochets.

Pour les parentheses, c est la meme chose:

  1. define CARRE(x) x*x

. ..
int a = CARRE(2+3);

ca va devenir
int a = 2+3*2+3; / / == 11 et non pas 25

Si tu mets des parentheses:

  1. define CARRE(x) ( (x)*(x))

int a = ( (2+3)*(2+3)); / / == 25

Jarozse
Jarozse
Niveau 10
27 janvier 2005 à 20:39:21

Ok merci !

JeanYvesYves
JeanYvesYves
Niveau 10
28 janvier 2005 à 14:59:49

en fait, il faut se dire que le compilo va remplacer violemment le code par l´autre, et donc il faut voir les faiblesses en y pensant au moment de l´insérer.
comme le coup du carre classique dont tu parles Kufa, ou celui du if :)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment