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

media-server-代码解析-语法篇-01

media-server/test/test.cpp at master · ireader/media-server · GitHub

#define RE_REGISTER(name, proto, func) static bool b_##name = Reflector::Instance()->registerFun(#name, proto, &func)
  1. #define RE_REGISTER(name, proto, func): 这是宏定义的开始,RE_REGISTER是宏的名称,nameprotofunc是参数。name是函数的名称,proto是函数的原型字符串,func是函数的指针。

  2. static bool b_##name: 这行代码定义了一个静态布尔变量,其名称由b_后跟宏参数name的值组成。静态变量的作用域限定在定义它的文件内,且在程序的整个生命周期内只被初始化一次。

  3. Reflector::Instance()->registerFun(#name, proto, &func): 这行代码调用一个名为Reflector的单例类的registerFun方法。Reflector::Instance()获取Reflector类的单例实例。registerFun方法接受三个参数:函数名的字符串表示(由#name生成,#name是预处理器字符串化操作符,将宏参数name转换为字符串)、函数原型字符串proto和函数指针&func

  4. #name: 这是预处理器的字符串化操作符,它将宏参数name转换为一个字符串字面量。

整个宏的作用是创建一个静态布尔变量,并尝试使用Reflector单例的registerFun方法注册一个函数。如果函数注册成功,registerFun方法将返回true,否则返回false。这个布尔变量b_##name可以用来检查函数是否成功注册。

#define DEF_FUN_VOID2(name, ...) void name ( __VA_ARGS__ ); \int t_##name(int argc, char const *argv[]){\name();return 0;\} \RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
  1. #define DEF_FUN_VOID2(name, ...): 这是一个宏定义的开始,DEF_FUN_VOID2是宏的名称,name__VA_ARGS__是参数。name是函数的名称,__VA_ARGS__是预处理器的可变参数宏,用于捕获宏调用时传递的所有其他参数。

  2. void name ( __VA_ARGS__ );: 这行代码定义了一个函数原型,函数名为name,参数列表由__VA_ARGS__确定。

  3. int t_##name(int argc, char const *argv[]){: 这行代码定义了一个测试函数,函数名为t_后跟宏参数name的值。这个测试函数接受命令行参数argcargv

  4. name();: 调用之前定义的函数name

  5. return 0;: 测试函数返回0,表示成功执行。

  6. RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name): 这行代码调用一个名为RE_REGISTER的宏,用于注册函数。它接受三个参数:函数名name,函数的字符串表示(包括返回类型、函数名和参数列表),以及测试函数的名称。

整个宏的目的是创建一个函数,一个与之对应的测试函数,并将这个函数注册到某个注册表中。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 测试面试宝典(四十三)—— 接口测试流程
  • 代码随想录算法训练营第三十四天 | 62.不同路径、63. 不同路径 II、343. 整数拆分、96. 不同的二叉搜索树
  • MySQL是如何实现数据排序的
  • 预测各种开发语言的市场占比
  • 【过题记录】 8.2 hddx
  • 新浪微博笔试秋招管培笔试测评肯耐珂萨题型题库解析
  • 标题标签
  • 开源=最强大模型!Llama3.1发布,405B超越闭源GPT-4o,扎克伯格:分水岭时刻
  • vue2使用wangeditor5及word导入解析的实现与问题
  • 安装Docker以及安装过程中的错误解决
  • 【微服务】springboot对接Prometheus指标监控使用详解
  • 远程连接服务
  • 【java框架开发技术点】通过反射机制调用类中的私有或受保护的方法
  • 基于 STM32 的 NAS私有云盘搭建:集成LwIP 协议、HTTP/HTTPS、WEB前端技术栈(代码示例)
  • React高级特性
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【刷算法】从上往下打印二叉树
  • Android交互
  • Angular2开发踩坑系列-生产环境编译
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JS基础之数据类型、对象、原型、原型链、继承
  • JS学习笔记——闭包
  • Laravel5.4 Queues队列学习
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Service Worker
  • vue中实现单选
  • 从零开始的无人驾驶 1
  • 对超线程几个不同角度的解释
  • 后端_ThinkPHP5
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 我是如何设计 Upload 上传组件的
  • 怎样选择前端框架
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • #Java第九次作业--输入输出流和文件操作
  • #前后端分离# 头条发布系统
  • (04)odoo视图操作
  • (1)(1.9) MSP (version 4.2)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (十八)三元表达式和列表解析
  • (十二)Flink Table API
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)winform之ListView
  • (转)视频码率,帧率和分辨率的联系与区别
  • .NET Core 2.1路线图
  • .Net Core 生成管理员权限的应用程序
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Framework 4.6.2改进了WPF和安全性