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 :

Valeurs de #define


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Valeurs de #define
    Bonjour à tous.

    J'ai une question à laquelle je ne parvient pas à trouver une réponse concernant l'utilisation de #define pour la déclaration de constantes.

    En fait dans certaines parties de code, je rencotre des instructions de ce type:

    #define VAR 0xune-valeur-hexadecimale

    ou

    #define VAR un décalage de bits

    En fait j'ai du mal à saisir ce qui motive le choix de l'utilisation soit d'une valeur hexadécimale, soit d'un décalage de bit pour donner une valeur à une constante. Est-ce relié à des optimisations de performances ?

    Merci d'avance pour tout indice

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Citation Envoyé par gedeon3 Voir le message
    En fait j'ai du mal à saisir ce qui motive le choix de l'utilisation soit d'une valeur hexadécimale, soit d'un décalage de bit pour donner une valeur à une constante. Est-ce relié à des optimisations de performances ?
    Si tu veux utiliser 2^7 c'est plus simple d'écrire 1 << 7 que 128 ou 0x80, enfin je trouve.
    Les instructions qui commencent par # n'utilisent pas de variable, elles font juste de la manipulation de texte. #define N 1 dit au préprocesseur qu'il doit remplacer toutes les occurrences de N par 1.
    :wq

  3. #3
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    En fait j'ai du mal à saisir ce qui motive le choix de l'utilisation soit d'une valeur hexadécimale
    C'est le choix du programmateur. Question de lisibilité, côté pratique pour effectuer des conversions en base de 2, effectuer des masques et opérations bits à bits...
    soit d'un décalage de bit pour donner une valeur à une constante
    Ca joue le rôle d'une petite fonction pour effectuer une opération portant sur la manipulation des bits. Cela a un côté explicite (nom de la macro préprocesseur) dans le code.

    Est-ce relié à des optimisations de performances ?
    Pour ma part, c'est surtout un côté pratique et une fiabilité du code, car cela permet de changer une unique fois la valeur d'une constante sans avoir besoin de la modifier dans toutes les parties de code où elle serait utilisée.


  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci à tous, c'est très clair désormais

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gedeon3 Voir le message
    En fait j'ai du mal à saisir ce qui motive le choix de l'utilisation soit d'une valeur hexadécimale, soit d'un décalage de bit pour donner une valeur à une constante. Est-ce relié à des optimisations de performances ?
    Etant donné qu'il s'agit d'expression constantes évaluées au moment de la compilation, je vois mal comment ça pourrait avoir une influence quelconque sur la performance..

    Non, c'est une question liée à l'usage et à la signification que l'on donne à la valeur.

    Si il s'agit d'une grandeur qu'il est habituel de traiter en décimal, on lui donne une valeur en décimal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define TEMP_MAX 95 /* 95 °C */
    #define SEUIL -40   /* -40 dB */
    etc.
    on ne va pas s'amuser à coder ça en octal ou en héxa pour rendre le code illisible pour le plaisir... Ne pas confondre écriture d'un programme et cryptographie, c'est déjà bien assez compliqué comme ça...

    Si il s'agit de données représentant un bit ou une combinaison de bits, on utilise l'hexadécimal ou les décalages, parce que c'est une manière simple et efficace de le faire

    Pour dire 'le bit 7 est à un, il y a 4 manières de le faire :
    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
     
    /* ce qu'on veut en binaire, c'est 10000000 */
     
    /* totalement ésotérique */
    #define bit7 128  
     
    /* pour ceux (dont je suis) qui connaissent par coeur 
       la conversion binaire/hexa : 8 = 1000 0 = 0000 */
    #define bit7 0x80        
     
    /* peu clair (inadapté au format 8-bit) */
    #define bit7 0200       
     
    /* Pour ne pas se casser la tête. Le numéro de bit apparait 'en clair'. 
       Il suffit de savoir ce que sont les opérateurs binaires */
    #define bit7 (1u << 7)
    http://emmanuel-delahaye.developpez.com/clib.htm
    Module BITS
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/08/2011, 13h48
  2. Réponses: 7
    Dernier message: 21/04/2009, 10h31
  3. Suppression de valeur dans une constante(define)
    Par BenoitTCN dans le forum Langage
    Réponses: 4
    Dernier message: 17/12/2008, 13h10
  4. retour de valeur #define
    Par jahmanzaar dans le forum Débuter
    Réponses: 5
    Dernier message: 26/10/2008, 13h31
  5. <bean:define> ne peut recevoir une valeur null
    Par nsdcrew dans le forum Struts 1
    Réponses: 2
    Dernier message: 08/07/2007, 17h26

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