OVH Cloud OVH Cloud

[debutant] - directive de compilation

4 réponses
Avatar
stat
Bonjour,

Je suis en train de lire une classe et je ne comprends pas pourquoi il
y a ecrit cela :

Ligne 1 #ifdef _DEBUG
Ligne 2 #undef THIS_FILE
Ligne 3 static char THIS_FILE[]=__FILE__;
Ligne 4 #define new DEBUG_NEW
Ligne 5 #endif

Je comprends individuellement les lignes 1, 2 ,4 et 5. Je ne comprends
pas la ligne 3. Pourquoi n'ecrit-on pas "__FILE__" au lieu de __FILE__
sans les guillemets ?

Pourriez-vous aussi avoir l'amabilite de me dire a quoi ca sert ce
genre de code svp (Ligne 2 et 3) ?

Merci bien.

--
This is an automatic signature of MesNews.
Site : http://www.mesnews.net

4 réponses

Avatar
Marc Boyer
In article , stat wrote:
Bonjour,

Je suis en train de lire une classe et je ne comprends pas pourquoi il
y a ecrit cela :

Ligne 1 #ifdef _DEBUG
Ligne 2 #undef THIS_FILE
Ligne 3 static char THIS_FILE[]=__FILE__;
Ligne 4 #define new DEBUG_NEW
Ligne 5 #endif

Je comprends individuellement les lignes 1, 2 ,4 et 5. Je ne comprends
pas la ligne 3. Pourquoi n'ecrit-on pas "__FILE__" au lieu de __FILE__
sans les guillemets ?


Parce qu'ils sont déjà dans __FILE__ ?

Pourriez-vous aussi avoir l'amabilite de me dire a quoi ca sert ce
genre de code svp (Ligne 2 et 3) ?


La ligne 2 détruit la macro THIS_FILE. Difficile d'en dire plus sans le
contexte, mais on peut imaginer:
1) qu'il existe "avant" une définition de THIS_FILE et qu'elle
ne convient pas
2) que le programmeur ne sait pas trop s'il existe une définition
de THIS_FILE avant, mais qu'il avait la flemme d'écrire
#ifdef THIS_FILE
#error "Macro name collision: THIS_FILE already defined"
#endif
en se reportant sur le fait que si THIS_FILE est déjà définit,
le préprocesseur émet généralement un message d'avertissement.

La ligne 3 définit une chaine de caractère statique non constante
de même contenu initial que __FILE__. Je ne vois pas bien
l'intérêt de ne pas utiliser __FILE__ directement. Un
grep THIS_FILE
permettrait peut-etre de comprendre l'usage qui en est fait.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Avatar
stat
Merci beaucoup.

--
This is an automatic signature of MesNews.
Site : http://www.mesnews.net
Avatar
Loïc Joly
In article , stat wrote:

Ligne 1 #ifdef _DEBUG
Ligne 2 #undef THIS_FILE
Ligne 3 static char THIS_FILE[]=__FILE__;
Ligne 4 #define new DEBUG_NEW
Ligne 5 #endif
[...]


La ligne 3 définit une chaine de caractère statique non constante
de même contenu initial que __FILE__. Je ne vois pas bien
l'intérêt de ne pas utiliser __FILE__ directement.


Peut être que l'utilisateur souhaite utiliser le nom du .h dans la suite
du code, même si cette suite n'est pas dans le même fichier.

// A.h

static char THIS_FILE[] = __FILE__;

// B.h
#include "A.h"
static char FILE1[] = __FILE__; // vaut "B.h"
static char FILE2[] = THIS_FILE; // vaut "A.h"

--
Loïc


Avatar
Fabien LE LEZ
On Wed, 01 Jun 2005 20:54:35 +0200, Loïc Joly
:

Peut être que l'utilisateur souhaite utiliser le nom du .h dans la suite
du code, même si cette suite n'est pas dans le même fichier.


Dans ce cas, le nom THIS_FILE n'est guère heureux...