C++ 宏已停止在Linux上编译

C++ 宏已停止在Linux上编译,c++,macros,g++,xlc,C++,Macros,G++,Xlc,我有一个包含多个宏的库,它在AIX上可以很好地编译,但是现在我需要编译相同的代码,而且宏似乎停止工作了。 我一直收到这样的信息: error: pasting "::" and "EVENT_DATA" does not give a valid preprocessing token. P>有一种方法可以使Linux上的C++预处理器像AIX一样。 我在linux上使用g++,在AIX上使用xlc\r 这是一个宏 #define E_TRA_INMOD(MName, Comp) \

我有一个包含多个宏的库,它在AIX上可以很好地编译,但是现在我需要编译相同的代码,而且宏似乎停止工作了。 我一直收到这样的信息:

error: pasting "::" and "EVENT_DATA" does not give a valid preprocessing token.
<> P>有一种方法可以使Linux上的C++预处理器像AIX一样。 我在linux上使用g++,在AIX上使用xlc\r

这是一个宏

#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: pasting "::" and "EVENT_DATA" does not give a valid preprocessing token. 

我想您不想在这里使用

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

您没有两个令牌可以粘合到一个令牌中,您只有
Comp
扩展到的内容。

您想在宏中执行什么操作?看起来第一个令牌粘贴是多余的:

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

错误消息是什么?或者您不喜欢的是什么?错误消息是:error:pasting:::“和“EVENT_DATA”没有提供有效的预处理令牌。您可以使用
cpp
program查看之后的源代码preprocessing@user286215,如果
cpp
拒绝预处理,则不会!错误消息似乎与您所指的用途无关,代码中的
事件数据在哪里?