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

相关推荐
wljy16 小时前
二、进制状态转换
linux·运维·服务器·c语言·c++
week@eight6 小时前
Linux - Doris
linux·运维·数据库·mysql
云泽8086 小时前
笔试算法 -位运算篇(二):从唯一字符到消失数字
c++·算法·位运算
平行云6 小时前
实时云渲染预启动技术解析:UE数字孪生应用的延迟优化机制(二)
linux·unity·ue5·webgl·实时云渲染·云桌面·像素流
繁华落尽,倾城殇?7 小时前
[C++11] : atomic,nullptr,default/delete,enum class
开发语言·c++·c++11·nullptr·atomic·enum class·default/delete
看到代码头都是大的7 小时前
CentOS环境下手动升级openssl、openssh
linux·运维·centos
浮生若城7 小时前
Linux——Ext系列文件系统
linux·运维·服务器
代码村新手7 小时前
C++-二叉搜索树
开发语言·c++
枳实-叶7 小时前
【Linux驱动开发】第16天:按键中断完整实战
linux·运维·驱动开发
智者知已应修善业8 小时前
【51单片机8位数码管动态显示日期小数点风格】2023-11-13
c++·经验分享·笔记·算法·51单片机