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 :

#define


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut #define
    salut tous le monde, j ça:
    #define receive_id 1
    .....
    function(,..,receive_id,...);

    pourquoi je passe par le define? je peux pas ecrire: function(,..,1,...);???

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    D'un point de vue "pratique", si ton "receive_id" est utilisé à plusieurs endroits, alors il suffira de modifier cette constante pour la modifier partout. Ca c'est pour vulgariser.
    Plus tard, j'expliquerais mieux l'indispensabilité de cette pratique

  3. #3
    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
    si tu peux!

    le #define est une instruction du "préprocesseur": cela signifie que quand tu vas compiler, ton compilateur va d'abord remplacer tous les "receive_id" par des "1" dans le code, et ensuite va compiler.


    dans ton cas ça revient au même.

    Mais c'est quand même pratique d'utiliser le #define.

    En effet, imagine que tu utilise la valeur de receive_id (1) plein de fois dans ton code. Et un jour, tu veux utiliser 2 plutot que 1.
    Au lieu de changer 2 en 1 a plein d'endroits différents dans le code, tu change juste la ligne:
    #define receive_id 1
    en
    #define receive_id 2

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Merci a tous!

  5. #5
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    et puis aussi si tu reprends ton code pour comprendre à quoi correspond le paramètre en question

  6. #6
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Le but c'est en fait de mettre du "sens" dans son code et se passer du "savoir".
    Quand j'y pense, à mes touts débuts, je trouvais ça amusant de garder en mémoire le fait que tel tableau contenait 4 elements, de savoir que passer "1" à cette fonction donnait ceci et passer "2" donnait celà.
    Mais, non c'est ingérable et surtout extremement source d'erreur.
    Il faut donc se concentrer sur "qu'est-ce qu'on veut comme valeur" et dire explicitement ce qu'on veut comme valeur au lieu de donner la valeur directement.
    Ex: ma fonction retourne 0, 1 ou 2 en fonction de si ya une erreur et de quelle erreur il s'agit.
    Si il ya une erreur "machin", la fonction de devrais pas retourner 1 mais devrait retourner ERREUR_MACHIN. Pareil dans l'appellant, on devrait pas tester si le retour est different de 0, on devrait tester si le retour est different de PAS_D_ERREUR. Car c'est ce qu'on veut faire : tester si ya pas d'erreur, on se fiche du reste.
    Si tu te demandais pourquoi on utilise la constante NULL alors qu'on sait pertinamment que ça vaut 0, là réponse est là.
    mettre du sens dans son code.

    C'est le meme principe pour la création de fonctions. Séparer ce qu'on veut faire de comment on le fait.

    Vouloir se rendre abstrait est un désir exprimé dans plusieurs technologies... sur le web, on prefere aujourd'hui utiliser des pages HTML avec seulement comme information "je veux un paragraphe, je veux un titre, je veux bloc, je veux une petite note, je veux un titre particulier, etc..." et de definir dans le CSS comment formatter ces paragraphes, blocs etc...

    Tout cela pour une raison essentielle : une mise à jour aisée.
    C'est la meme raison pour laquelle on a créé les bases de données relationnelles : il faut mettre l'info à un seul endroit.


    Bref pour revenir au C
    Ma théorie c'est que toute constante numerique (ex: 4) ou chaine (ex : "blabla") pourrait faire l'objet d'une constante symbolique (#define).

    En pratique, toute constante numerique ou chaine qui a un sens particulier à nos yeux devrait faire l'objet d'une constante symbolique.
    En pratique-bis, toute constatne numerique ou chaine qui est identifiée comme etant la meme et qui se trouve à plusieurs endroits devrait faire l'objet d'une constante symbolique.

  7. #7
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par Gruik
    En pratique, toute constante numerique ou chaine qui a un sens particulier à nos yeux devrait faire l'objet d'une constante symbolique.
    Il me semble qu'il y a des compilateurs qui imposent ça pour les nombres différents de 0 et 1 (et 2 ?)

  8. #8
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ca m'interesse ^^

  9. #9
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par Gruik
    Ca m'interesse ^^
    Le seul dont j'ai entendu parler tourne exclusivement sous VMS, ça t'intéresse toujours ?

  10. #10
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Rectification, c'est pas un compilateur c'est juste un programme, il s'appelle dcc pour "disciplined C checker". C'est développé par Supélec et un coup de google te donnera les coordonnées du ftp public.

    ftp://ftp.supelec.fr
    pub/lang/dcc

    Ya les sources donc c'est peut-être portable...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Eusebius
    Rectification, c'est pas un compilateur c'est juste un programme, il s'appelle dcc pour "disciplined C checker". C'est développé par Supélec et un coup de google te donnera les coordonnées du ftp public.

    ftp://ftp.supelec.fr
    pub/lang/dcc

    Ya les sources donc c'est peut-être portable...
    Hé hé, du boulot pour ce WE, merci.

  12. #12
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Hé hé, du boulot pour ce WE, merci.
    Attends, tu cherchais tu boulot ? Si tu t'ennuies, on peut s'entendre !

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Par défaut
    Dans le cas des constantes symboliques qui représentent des entiers ne serait il pas plus judicieux d'utiliser une énumération? dans une librairie dynamique séparée du programme? ce qui nous permettrait lors de mise a jour de ne pas devoir recompiler tout un programme mais uniquement cette librairie...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par naiko
    Dans le cas des constantes symboliques qui représentent des entiers ne serait il pas plus judicieux d'utiliser une énumération? dans une librairie dynamique séparée du programme? ce qui nous permettrait lors de mise a jour de ne pas devoir recompiler tout un programme mais uniquement cette librairie...
    Les enum, c'est bien mais ça n'empêche pas de recompiler tout ce qui les utilise le jour où on ajoute une valeur... Pour la bonne et simple raison que si ils interviennent dans une interface externe, ils sont par-définition définis dans un .h.

    Par contre le typage permet (à défaut de typage fort), de mieux organiser les sources...

    Les enum sont massivement utilisés dans les applications industrielles où les données on plus de sens (et de limites) que dans les applications scolaires...

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

Discussions similaires

  1. #define D3D_DEBUG_INFO
    Par moldavi dans le forum DirectX
    Réponses: 7
    Dernier message: 03/02/2005, 14h14
  2. INSO Filter : "USER-defined exception" avec ctx_do
    Par Wiztiti dans le forum Oracle
    Réponses: 2
    Dernier message: 01/06/2004, 16h14
  3. USER DEFINE FONCTION : PB éxécution requête
    Par juelo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/01/2004, 11h12
  4. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45
  5. define avec GCC.
    Par vagabon dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 12/06/2003, 14h04

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