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

[C] toute petite question

iscario
iscario
Niveau 7
10 avril 2008 à 18:53:55

on m'a incité dans un TP a utiliser des macro-définitions pour définir mes fonctions :

  1. define xxx(...)

Quel est est l'intéret d'utiliser une macro définition ? (à part la condensation du texte ) ?

voila merci.

Ikki_2504
Ikki_2504
Niveau 11
10 avril 2008 à 19:06:01

Ca sert simplement à faciliter la maintenance de ton programme. Par exemple, tu fais un tableau d'une taille de 255 par exemple. A plusieurs endroits de ton code, tu écriras tab[255], dans des boucles, des pasages de paramètres etc...
Et le jour où tu te rends compte qu'en fait 255 c'est pas assez (ou trop), il va falloir que tu cherches dans ton code TOUS les endroits où t'as écrit tab[255] pour changer le 255.

Si au début de ton code, t'avais fait un #define MAX_TAILLE 255, t'aurais déclaré tab[MAX_TAILLE] et partout où t'aurais eu à indiquer la dimension de ton tableau, t'aurais mis MAX_TAILLE au lieu de 255.

Quel est l'interêt ?

En fait, #define est une constante de préprocesseur, c'est à dire que le préprocesseur (avant la compilation donc) va chercher dans ton code tous les MAX_TAILLE et les remplacer par la valeur correspondante (255). Le jour où t'as envie de changer la valeur, tu n'auras qu'à changer la valeur de MAX_TAILLE au lieu de chercher tous les tab[255] : ils seront remplacés automatiquement par la nouvelle valeur que t'auras indiqué dans MAX_TAILLE.

Idem pour les fonctions

dnob700
dnob700
Niveau 10
10 avril 2008 à 20:54:53

non, ça ne sers à rien. Déjà pour définir des constantes il vaut mieux utiliser des constantes plutôt que des macro (même si par paresse on ne le fait pas toujours), mais pour faire des appels de fonctions, sauf dans quelques cas particuliers où l'on est absolument sûr d'avoir un gain, il vaut toujours mieux utiliser une vraie fonction.

iscario
iscario
Niveau 7
15 avril 2008 à 19:48:58

je vous remercie pour vos réponses.

iscario
iscario
Niveau 7
03 mai 2008 à 13:21:07

nouvelle petite question :
j'ai du mal comprendre la fonction strdup : c'est pour allouer un espace mémoire optimisé a ma chaine de caractère non ?

Chaos_Clad
Chaos_Clad
Niveau 10
03 mai 2008 à 13:27:45

"Déjà pour définir des constantes il vaut mieux utiliser des constantes plutôt que des macro"

:d) Tu veux dire "const type = truc" ? Et pourquoi c'est mieux ?

________________________________________
Ma vidéo du moment :
http://youtube.com/watch?v=96Fm5SPsjD0 (Les Kiss Kool, à voir absolument :coeur: )

"Suicide par défénestration : encore une victime de Qt :( "

godrik
godrik
Niveau 30
03 mai 2008 à 13:28:46

oui c'est l'idée.
Usuellement, on utilise des buffers beaucoup trop gros pour faire les entrés sorties. Si on les gardes en l'état on consomme beaucoup trop de mémoire.

strdup alloue un buffer de la bonne taille et recopie la chaine dedans. Ainsi tu ne consomme pas trop de mémoire.

dnob700
dnob700
Niveau 10
03 mai 2008 à 15:17:30

chaos : parce que c'est plus propre (particulièrement d'utiliser des enumérations plutôt que des constante avec #define parce que ça permet au compilo de vérifier leur bonne utilisation). Mais pour les constantes, ce n'est pas super important.

C'est vraiment pour l'appel de fonction qu'il est horrible d'utiliser des macro : ça rend le code beaucoup moins lisible, sans vraiment améliorer les performance (au contraire ça peut empirer les choses) et avec la possibilité d'introduire plein de bogue (évaluation multiple d'arguments avec des effets de bords typiquement).

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