Directive #define

Résolu/Fermé
choco90 Messages postés 458 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 13 juillet 2016 - 25 déc. 2015 à 20:26
SypayV Messages postés 6583 Date d'inscription vendredi 28 décembre 2007 Statut Contributeur Dernière intervention 19 février 2023 - 25 déc. 2015 à 23:34
Bonjour,

Que fait la directive
#define
dans cette ligne:

#define SINK_TRACE_FILE "sink_trace.tr"





Merci de me répondre.

1 réponse

SypayV Messages postés 6583 Date d'inscription vendredi 28 décembre 2007 Statut Contributeur Dernière intervention 19 février 2023 449
25 déc. 2015 à 20:30
Bonjour,

Chaque mot SINK_TRACE_FILE sera remplacé par "sink_trace.tr" lors de la compilation.

A l'avenir, utilisez Google. Vos questions ont déjà été posées, et il y a bien d'autres choses à apprendre rien qu'en cherchant ça, des vrais infos croustillantes ;)
0
choco90 Messages postés 458 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 13 juillet 2016 7
25 déc. 2015 à 22:12
Salut :)

Si on utilise le mot SINK_TRACE_FILE dans le fichier source est ce qu'il sera remplacé par le contenu du fichier sink_trace.tr? Et pourquoi il mettent les guillemets?


C'est vrai. T'as raison. J'aimerais bien utiliser Google et lire des cours et des livres sur C++ mais ça va me prendre beaucoup de temps et moi je travaille sur un projet et je dois faire vite pour comprendre le code source d'un protocole afin de le modifier pour implémenter mon propre protocole et c'est pour cette raison que je me dirige vers les forums c'est pour avoir une réponse rapide, précise et exacte.

Merci pour ton aide. C'est gentil de ta part.
0
SypayV Messages postés 6583 Date d'inscription vendredi 28 décembre 2007 Statut Contributeur Dernière intervention 19 février 2023 449 > choco90 Messages postés 458 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 13 juillet 2016
Modifié par SypayV le 25/12/2015 à 22:36
Ah ... Les contraintes de temps ... Je n'ai pas encore eu ce problème, mais je sais que Google est toujours plus rapide qu'une réponse de SypayV.
Il y a beaucoup de forums et beaucoup de réponses utiles.
Avec une recherche bien pensée et un entrainement de lecture en diagonale, on a des réponses en moins d'une demie-heure, sans parler des restes qui vont rester dans la mémoire inconsciente et développer notre créativité ...

Bref.
Il ne sera pas remplacé par le fichier.

Je veux dire ... Imagine le compilateur ... Il voit ton fichier source ... Il voit SINK_TRACE_FILE ... Il se dit :
"Heh ! Pu***n, faut remplacer SINK_TRACE_FILE avec "sink_trace.tr" avec les guillemets !
Donc il le fait.

Et si jamais c'était arrivé, imaginons dans la fonction fopen :
Toi, dans ta source, tu vois :

pFile = fopen (SINK_TRACE_FILE,"w");


Le compilateur verra :

pFile = fopen ("sink_trace.tr","w");


Quel est l’intérêt ?

Très simple.
Tu arriveras bientôt sur un fichier qui inclue 1987 fois le fichier "sink_trace.tr".
Le jour où tu voudras changer "sink_trace.tr" parce que, pour X raisons, il doit changer, bah tu devras le faire 1987 fois. ça te prendra au moins une semaine. Tu auras des ampoules aux mains. Arrêt de travail, etc ...
JAMAIS !
Grâce à la directive, tu changes une ligne, et tout ira avec.

C'est ce qu'on appelle les valeurs magiques.

Il FAUT définir les valeurs magiques avec les directives.

Comme la valeur PI par exemple (atan(0))
Edit : PARDON ! PI=4*atan(1), et merci Google.
0
choco90 Messages postés 458 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 13 juillet 2016 7
25 déc. 2015 à 23:17
Salut SypayV!

Merci infiniment pour ton explication.

Tu m'as énormément aidé :D
0
choco90 Messages postés 458 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 13 juillet 2016 7
25 déc. 2015 à 23:19
Mais dis moi pourquoi on utilise pas tout simplement une constante?
0
SypayV Messages postés 6583 Date d'inscription vendredi 28 décembre 2007 Statut Contributeur Dernière intervention 19 février 2023 449 > choco90 Messages postés 458 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 13 juillet 2016
Modifié par SypayV le 25/12/2015 à 23:35
Il peut y avoir plusieurs raisons :

- Une constante a besoin d'un type.
- On ne peut pas définir plusieurs fois la même constante, par contre on peut inclure plusieurs fois la même macro contenue dans un .h (Avec les directives que l'on a vu sur l'autre message du forum) = Un seul fichier .h servant à contenir toutes les valeurs magiques.
- Lisibilité du code (Tu n'es jamais seul à programmer ta propre application, même sur une autre planète ...)
- Optimisation (Il peut arriver que la constante passe mal alors qu'avec la macro tout va bien, à cause de la conversion de type).

Etc ...

C'est un choix. IL FAUT TESTER. Il n'y a pas vraiment de règle en programmation. Par contre, il faut savoir choisir la bonne solution et faire des recherches... Et pour ça, il faut connaître tout le processus d'analyse et conception/compilation/fabrication des liens/packaging ... Bref, plus tu en apprendras, par la pratique et la recherche et ... plus tu apprendras ... tout simplement ... C'est un cercle, mais celui-ci n'est pas vicieux.
0