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,...);???![]()
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,...);???![]()
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
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
et puis aussi si tu reprends ton code pour comprendre à quoi correspond le paramètre en question![]()
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.
Brefpour 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.
Il me semble qu'il y a des compilateurs qui imposent ça pour les nombres différents de 0 et 1 (et 2 ?)Envoyé par Gruik
Le seul dont j'ai entendu parler tourne exclusivement sous VMS, ça t'intéresse toujours ?Envoyé par Gruik
![]()
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.Envoyé par Eusebius
Attends, tu cherchais tu boulot ? Si tu t'ennuies, on peut s'entendre !Envoyé par Emmanuel Delahaye
![]()
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.Envoyé par naiko
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...
Partager