Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

#define

4 réponses
Avatar
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.

4 réponses

Avatar
Michel Decima
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.

Avatar
AG
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.

Avatar
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.
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 };

Avatar
James Kanze
On Jul 13, 8:41 pm, Fabien LE LEZ wrote:
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