[英]c++ macro concatation not worked under gcc
#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”沒有給出有效的預處理令牌。
我該如何解決?
ps:宏擴展應該是LOG(LL_TRACE)-> __LOG(LL_TRACE)-> LOG_LL_TRACE()。
ps:假設LL_TRACE必須具有0值,請不要將其刪除。
有兩件事使此代碼無法在g ++上編譯:首先,您引用的錯誤是因為您想要擁有此代碼:
#define LOG(level) __LOG(level)
注意沒有##
。 這些井號表示串聯,但是您沒有串聯任何東西。 只是轉發一個論點。
第二個錯誤是您必須刪除
#define LL_TRACE 0
這行代碼意味着您最終將調用LOG(0),后者會擴展為未定義的LOG_0。
不應該是:
#define LOG(level) __LOG(level)
這樣可行:
#include <iostream>
void LOG_TRACE() { std::cout << "reach here"; }
#define LOG_LL_TRACE LOG_TRACE
#define __LOG( level ) LOG_##level()
#define LOG(level) __LOG(level)
int main()
{
LOG( LL_TRACE );
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.