#define

Le
AG
Bonjour,

Est-il possible de regrouper des macros dans une classe, ou un nom
d'espace :

namespace Dec
{
#define N 5
}

ou même à la limite :

namespace Dec
{
#define Dec::N 5
}


et utiliser Dec::N à la place de 5 là ou l'on veut ?

AG.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel Decima
Le #309372
Bonjour,

Est-il possible de regrouper des macros dans une classe, ou un nom
d'espace :

namespace Dec
{
#define N 5
}


Non, ce n'est pas possible avec des macros.

J'ai l'impression que tu veux definir une constante. Dans ce cas, tu
devrais plutot utiliser const a la place de define, et alors tu peux
placer les constantes dans des namespaces:

namespace Dec {
cont int N = 5;
}

et utiliser ensuite le symbole Dec::N.

AG
Le #309371
J'ai l'impression que tu veux definir une constante. Dans ce cas, tu
devrais plutot utiliser const a la place de define, et alors tu peux
placer les constantes dans des namespaces:

namespace Dec {
cont int N = 5;
}

et utiliser ensuite le symbole Dec::N.
Oui c'est un peu ça. mais le problème, c'est que mon code est

réinterprété par un outil, pour lequel l'allocation dynamique de la
mémoire n'est pas possible. Donc je ne peux pas utiliser ton Dec::N
car mon outil ne reconnait pas

int tab[Dec::N];

il ne reconnait que

int tab[5];

AG.

Fabien LE LEZ
Le #309370
On Fri, 13 Jul 2007 15:52:14 +0200, "AG"
car mon outil ne reconnait pas

int tab[Dec::N];


Mauvais outil, changer outil.
En C++, une constante est reconnue comme telle par le compilateur, et
int tab[Dec::N];
est équivalent à
int tab[5];

Note par ailleurs que, dans certains cas, un compilateur un peu vieux
appréciera mieux un

enum { N= 5 };

James Kanze
Le #309369
On Jul 13, 8:41 pm, Fabien LE LEZ
On Fri, 13 Jul 2007 15:52:14 +0200, "AG"
car mon outil ne reconnait pas

int tab[Dec::N];


Mauvais outil, changer outil.


Si j'ai bien compris, son outil travaille sur la sortie du
préprocesseur. Écrire un petit outil qui reconnaît un
sous-ensemble très restraint des déclarations C++, c'est une
chose. Écrire un outil qui parse tout le C++, pour pouvoir
évaluer les expressions integrales constantes, c'est un autre.
(J'ai un outil qui parse les enum, pour en générer les tableaux
ou les fonctions de conversion entre l'enum et des chaînes. Je
n'y essaie pas d'interprêter ce qui est à gauche du =, s'il y en
a ; je me contente de le sauter, en avançant au prochain
, ou } qui n'est ni quoté, ni dans des parenthèses.)

En C++, une constante est reconnue comme telle par le compilateur, et
int tab[Dec::N];
est équivalent à
int tab[5];


Certes, mais tu ne vas pas prétendre qu'il faut écrire un
compilateur C++ complet chaque fois qu'on veut traiter un peu de
code source.

--
James Kanze (Gabi Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Publicité
Poster une réponse
Anonyme