#include <iostream>
void LOG_TRACE() { std::cout << "reach here"; }
#define LOG_LL_TRACE LOG_TRACE
#define LL_TRACE 0
#define __LOG(level) LOG_##level()
#define LOG(level) __LOG(##level)
int main()
{
LOG(LL_TRACE);
return 0;
}
的代码是在Visual Studio中工作不工作,但报告:TEST.CPP:13:1:错误:粘贴 “(” 和 “LL_TRACE” 没有给出一个有效的预处理标记。C++宏concatation下GCC
我该如何解决
PS:宏扩展应该是LOG(LL_TRACE) - > __LOG(LL_TRACE) - > LOG_LL_TRACE()
PS:?假设LL_TRACE必须有一个0值,不要删除。
我不认为我能理解你为什么会想要做这样的事情...的 –
可能重复[使用##和__LINE__创建C宏(使用宏定位连接)](http://stackoverflow.com/questions/1597007/creating-c-macro-with-and-line-token-concatenation-with-positioning-宏) – littleadv
宏扩展应该是LOG(LL_TRACE) - > __LOG(LL_TRACE) - > LOG_LL_TRA CE()。 __LOG是现实世界中复杂的宏,并且被批量LOG宏调用。 –