2013-02-25 2 views
0

J'ai une bibliothèque avec plusieurs macros, elle compile bien sous AIX, mais maintenant j'ai besoin de compiler le même code et il semble que les macros se soient arrêtées pour fonctionner. Je continue à recevoir le message:Macro arrêtée pour la compilation sous Linux

error: pasting "::" and "EVENT_DATA" does not give a valid preprocessing token. 

est-il un moyen de faire le C++ préprocesseur sur les actes de Linux comme sur aix. J'utilise g ++ sous linux et xlc_r sous AIX.

Voici l'une des macros.

#define E_TRA_INMOD(MName, Comp) \ 
    static const ES_TracMg::ES_TracComps ES_TracComp = \ 
            ES_TracMg::##Comp; \ 
    static char* ES_Mod_Namp = MName; \ 
    static unsigned long ES_SerMas = \ 
       ES_TracMg::m_MServ[ES_TracMg##Comp]; 

Je l'appelle comme E_TRA_INMOD("Error", EVENT_DATA);
L'erreur est:

error: pasting "::" and "EVENT_DATA" does not give a valid preprocessing token. 
+0

Qu'est-ce que le message d'erreur? Ou qu'est-ce que vous obtenez et vous n'aimez pas? –

+0

Le message d'erreur est: error: coller "::" et "EVENT_DATA" ne donne pas de jeton de pré-traitement valide. – Lefsler

+0

vous pouvez utiliser le programme 'cpp' pour voir vos sources après prétraitement – ShPavel

Répondre

2

Je pense que vous ne voulez pas utiliser ## ici:

#define E_TRA_INMOD(MName, Comp) \ 
    static const ES_TracMg::ES_TracComps ES_TracComp = \ 
            ES_TracMg::##Comp; \ 

Il devrait être

#define E_TRA_INMOD(MName, Comp) \ 
    static const ES_TracMg::ES_TracComps ES_TracComp = \ 
            ES_TracMg::Comp; \ 

Vous n'avez pas deux jetons à coller ensemble dans un seul jeton, vous avez juste ce que Comp se développe.

0

Qu'essayez-vous de faire dans la macro? Il semble que la première pâte symbolique soit redondante:

#define E_TRA_INMOD(MName,Comp) \ 
    static const ES_TracMg::ES_TracComps ES_TracComp = \ 
            ES_TracMg::Comp; \ 
    static char* ES_Mod_Namp = MName; \ 
    static unsigned long ES_SerMas = \ 
       ES_TracMg::m_MServ[ES_TracMg##Comp]; 
Questions connexes