我有一个包含几个宏的库,它在AIX上可以很好地编译,但是现在我需要编译相同的代码,而且看来这些宏停止了工作。
我不断收到消息:

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


有没有一种方法可以使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", EVENT_DATA);
错误是:

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扩展为任何对象即可。

关于c++ - 宏停止在Linux上编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15073476/

10-11 12:30