【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的使用在看,一步一步验证才发现是多加了一个续行符

相关推荐
感哥3 小时前
C++ 多态
c++
沐怡旸10 小时前
【底层机制】std::string 解决的痛点?是什么?怎么实现的?怎么正确用?
c++·面试
River41613 小时前
Javer 学 c++(十三):引用篇
c++·后端
轻松Ai享生活16 小时前
5 节课深入学习Linux Cgroups
linux
感哥16 小时前
C++ std::set
c++
侃侃_天下16 小时前
最终的信号类
开发语言·c++·算法
christine-rr16 小时前
linux常用命令(4)——压缩命令
linux·服务器·redis
三坛海会大神55517 小时前
LVS与Keepalived详解(二)LVS负载均衡实现实操
linux·负载均衡·lvs
東雪蓮☆17 小时前
深入理解 LVS-DR 模式与 Keepalived 高可用集群
linux·运维·服务器·lvs
博笙困了17 小时前
AcWing学习——差分
c++·算法