Probleme de macros

Signaler
Messages postés
1
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
24 mars 2006
-
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
-
Bonjour, jai un probleme avec mes macros. gcc 3.4.2 me dit:

m3d_c_bd.cpp:63:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_bd.cpp:84:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_bd.cpp:84:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_bd.cpp:84:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_bd.cpp:84:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_bd.cpp:124:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_bd.cpp:124:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_bd.cpp:124:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_bd.cpp:124:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_mai.cpp:368:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_mai.cpp:368:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_mai.cpp:368:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_mai.cpp:368:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_mai.cpp:524:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_mai.cpp:524:1: pasting ")" and "->" does not give a valid preprocessing token
m3d_c_mai.cpp:524:1: pasting ")" and "->" does not give a valid preprocessing token


Ces erreurs surviennent sur lappel au 2 macros suivante

#define SUPPRIMER_LISTE(type,tete,fin,entite)\
{\
struct mknom(st_,type) *pcourant, *scourant ;\
pcourant = PREC(entite) ;\
scourant = SUIVANT(entite) ;\
if (pcourant== NULL) {\
if (scourant == NULL) { \
PREC(entite) = NULL ;\
SUIVANT(entite) = NULL ;\
tete = NULL ;\
fin = NULL ;\
}\
else {\
scourant->prec = NULL ;\
PREC(entite) = NULL ;\
SUIVANT(entite) = NULL ;\
tete = scourant ;\
}\
}\
else {\
if (scourant == NULL) \
{pcourant->suivant = NULL ;\
PREC(entite) = NULL ;\
SUIVANT(entite) = NULL ;\
fin = pcourant ;}\
else {pcourant->suivant = scourant ;\
scourant->prec = pcourant ;\
PREC(entite) = NULL ;\
SUIVANT(entite) = NULL ;}\
}\
}



et



#define INSERER_TETE_LISTE(tete,fin,entite)\
PREC(entite) = NULL ;\
if (tete != NULL) {\
/* la queue est inchangee */\
SUIVANT(entite) = tete ;\
PREC(tete) = entite ;\
tete = entite ;\
}\
else {\
SUIVANT(entite) = NULL ;\
tete = entite ;\
fin = entite ;\
}



Qui eux utilisent PREC et SUIVANT

#define PREC(entite) mknom((entite),->prec)
#define SUIVANT(entite) mknom((entite),->suivant)

Qui eux utilisent mknom

#define mknom(a,b) a##b




Merci de venir a mon secours!

2 réponses

Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
2
rien qu'à voir la tête de tes macros j'ai qu'une chose à dire:
fait des fonctions
car ici ton code est bien gros pour être placé en macro à chaque fois(çà augmente inutilement la taille de l'exe)
De plus, tu n'aura plus ces ignobles erreurs de préprocesseur .

A m a u r y
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
10
Personnellement j'aurais conseillé la même chose, car mettre ça en macro, ça revient à ne pas utiliser la puissance du C, qui est justement la possiblité de créer des fonctions, et ça gène à la lisibilité du code.