c++宏连接在gcc下不能工作

c++ macro concatation not worked under gcc

本文关键字:不能 工作 gcc 宏连 连接 c++      更新时间:2023-10-16
#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下工作,但是report: test.cpp:13:1: error: paste "("answers"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;                                                           
}