0

いくつかのマクロを含むライブラリがあり、AIXで正常にコンパイルされますが、同じコードをコンパイルする必要があり、マクロが機能しなくなったようです。私はメッセージを受け取り続けます:

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

LinuxのC++プリプロセッサをAIXのように動作させる方法はありますか?Linuxではg++を使用し、AIXではxlc_rを使用しています。

これがマクロの1つです。

#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];

私はそれを次のように呼びE_TRA_INMOD("Error", EVENT_DATA);
ますエラーは次のとおりです:

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

2 に答える 2

2

ここでは使用したくないと思います##

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

そのはず

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

2 つのトークンを接着して 1 つのトークンにする必要はありませんComp

于 2013-02-25T18:14:49.307 に答える
0

マクロで何をしようとしていますか?最初のトークン ペーストは冗長なようです。

#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];
于 2013-02-25T18:16:21.067 に答える