【Json—RPC框架】:宏定义不受命名空间限制,续行符的错误使用造成的bug

为什么不受命名空间的限制?

宏处理在预处理阶段, 预处理在编译之前,编译才进行语法分析,语义分析。命名空间也只能限制这部分。

在Json-RPC框架的实现中,遇到如下问题。一开始以为是在实现日志宏的时候,有其他原因造成不能使用,后面还是发现只是多一个换行符造成的错误。

首先宏定义不受C++中命名空间的限制。

宏定义,如果在有地方用到了宏定义,那么在预处理阶段就会进行宏替换。

kimi的解释如下:

好像找到了答案:

宏处理在预处理阶段, 预处理在编译之前,编译才进行语法分析,语义分析。命名空间也只能限制这部分。

验证代码如下:(下面的日志宏也可以验证)

复制代码
//测试关于宏定义受不受命名空间影响
namespace AAA{
    #define multiply(a) (2*a)
}

int main()
{
    std::cout<<multiply(2)<<std::endl;
    return 0;
}

这没问题,可以正常访问。

但是好像似乎不怎么规范,但是这个宏用于是当前命名空间的其他函数的调试,用于当前命名空间的其他部分好像还行。


日志宏的实现,用于调试代码,定位错误。

复制代码
namespace Json_RPC
{
    #define LOG(ragameter,...){\
        time_t t=time(NULL);\
        struct tm* local=localtime(&t);\
        char time_buffer[32]={0};\
        strftime(time_buffer,31,"%m-%d %T",local);\
        fprintf(stdout,"[%s][%s:%d]" ragameter "\n",time_buffer,__FILE__,__LINE__,##__VA_ARGS__);\
    }
}

我以为是warning,就没注意。

然后一直抓着下面LOG的使用在看,一步一步验证才发现是多加了一个续行符。

相关推荐
雯宝4 小时前
mnt_init 函数
linux
UIU1145 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归
Fruit_Caller5 小时前
static
开发语言·c++
律宏阔10 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔10 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴10 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千10 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei3710 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei3710 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei3710 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化