簡體   English   中英

C ++宏連接在gcc下不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM