当前位置: 首页 > news >正文

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

相关文章:

  • 计算机组成原理试题六
  • 正则表达式:贪婪匹配与非贪婪匹配
  • [贪心算法] 摆动序列
  • 佰泰盛世公司推出最新低成本的DSP功放音箱解决方案
  • 仿RabbitMQ的消息队列
  • 数据集格式转换——json2txt、xml2txt、txt2json【复制就能用】
  • 专栏特辑--如何查询Essential Science Indicators (ESI)- 高被引论文--我的文章和高引文章的差距
  • ccfcsp3402矩阵重塑(其二)
  • 2025-03-18 学习记录--C/C++-PTA 习题4-9 打印菱形图案
  • Python 阶段一综合案例之质数判断算法
  • AGI大模型(8):提示词的安全与防护
  • 无人机吊舱模块更换技术难点分析!
  • Redis-锁-商品秒杀防止超卖
  • docker安装rabbitmq
  • Ubuntu24.04 启动后突然进入tty,无法进入图形界面
  • AI 技术在智慧农业中的应用实践
  • 前缀和 之 哈希表 之 和 的奇偶与倍数
  • MySQL InnoDB引擎的锁机制详解
  • 蓝桥杯每日一题
  • 汽车PKE无钥匙进入系统一键启动系统定义与原理
  • 国家主席习近平在莫斯科出席红场阅兵式
  • 上海交大:关注到对教师邵某的网络举报,已成立专班开展调查
  • 教育部、国家发改委联合启动实施教师教育能力提升工程
  • 花20万骑自行车?CityRide带火“骑行经济”
  • 江苏省泰州市委常委、宣传部部长刘霞接受审查调查
  • 长三角多地重启游轮跨市游,“恢复苏杭夜航船”呼声又起