宏已停止在Linux上编译
Macro stopped to compile on Linux
我有一个包含多个宏的库,它在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
扩展到的任何内容即可。
您想在宏中做什么?看起来第一个令牌粘贴是多余的:
#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];
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何从Linux编译到SDL2应用程序到Windows?
- 使用 MINGW 和 CPLEX 库链接从 Linux 编译 Windows 可执行文件
- 如何在Visual Studio中添加Linux编译到Cmake Project
- Linux 编译 - 冲突的库
- Linux C++编译错误
- Linux 编译错误 - 无法将类型"字符串"转换为类型"字符串&&"
- 当我在Windows上运行它时,为什么我的Linux编译二进制不起作用
- 使用Linux g++编译带有附加库的c++程序
- 如何在Windows中为Unix/Linux编译C++应用程序
- c++ Linux 编译错误
- 使用链接linux编译GLFW应用程序问题
- C++新手的 Linux 编译
- Linux编译错误-GCC 4.3.4-模板参数列表太少
- Linux g++ 编译错误:错误:预期的"",""或"..."在"||"标记之前
- Linux g++编译错误:/usr/bin/ld:找不到-l/usr/local/include
- Linux 编译"long distance"兄弟姐妹之间的dynamic_cast失败
- 为较旧的Linux编译c++ 11程序
- 如何安装适用于Mingw Linux编译环境的BerkeleyDB
- Windows Linux c++ 编译问题:"no matching function for call"