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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 42
    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 : 42
    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 ?)

+ 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