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

带参宏定义

#define WM_EVENT_DECLARE_GROUP(group) extern wm_event_group_t const group 

宏定义的结构:

  1. #define:这是C语言中的预处理指令,用来定义宏。宏的作用是替换代码中的特定部分,类似于全局的文本替换。这里定义的宏名称是 WM_EVENT_DECLARE_GROUP

  2. group:这是宏的参数。你可以将 group 理解为一个占位符,调用这个宏时传递的参数会替换宏中的 group

  3. extern wm_event_group_t const group

    • extern:表示这个变量是在别的文件中定义的,而不是当前文件。它只是在当前文件中声明这个变量,实际定义在其他地方。
    • wm_event_group_t:这是类型,来自于你之前看到的 typedef const char * wm_event_group_t,即事件组类型。
    • const:表示这个变量是常量,值不能被修改。
    • group:这是变量名,代表事件组的名字。这个名字会在使用宏时传入。

这个宏做了什么?

每次调用 WM_EVENT_DECLARE_GROUP 宏时,它会生成一行代码,声明一个类型为 wm_event_group_t 的常量,并且它是 extern 的,也就是说它的定义在别处。例如:

WM_EVENT_DECLARE_GROUP(my_event_group);

展开后的代码就是:

extern wm_event_group_t const my_event_group;

 

这段代码的作用是在当前文件中声明了一个常量 my_event_group,它是类型 wm_event_group_t,但它的实际定义会在别的文件中。

为什么这样使用?

  1. extern的使用:当我们在多个源文件中共享某个变量时,通常会在一个文件中定义该变量,在其他文件中使用 extern 声明。这样不同的文件可以共享同一个变量,避免重复定义。

  2. 宏的作用:这个宏让你不用每次都手动写 extern wm_event_group_t const <group_name>。而是通过调用宏,传入不同的组名,代码变得更简洁易读。

例子:

假设你有两个源文件,一个定义事件组,一个使用事件组。

事件组定义文件

wm_event_group_t const my_event_group = "MY_EVENT_GROUP";

 事件组使用文件

WM_EVENT_DECLARE_GROUP(my_event_group);// 使用my_event_group处理事件
event_handler(my_event_group, event_id, data, priv);

这样,两个文件共享同一个事件组变量,使用 extern 确保 my_event_group 是从别处定义的。

希望这个解释能帮你理解这个宏的结构和用途!

http://www.lryc.cn/news/434969.html

相关文章:

  • java流
  • Java ArrayList扩容机制 (源码解读)
  • 『功能项目』管理器基类【38】
  • Flex布局最后一行元素的对齐的解决方案
  • 【ShuQiHere】上章:计算与计算机的基础概念
  • 前端框架有哪些?全面解析主流前端框架
  • 4G MQTT网关在物联网应用中的优势-天拓四方
  • 【网上商城项目结构】
  • VMware-Ubuntu Server安装教程
  • 从hadoop平台下载文件到本地Windows
  • MySQL-CRUD入门2
  • 高级java每日一道面试题-2024年9月06日-基础篇-Java中的PO、VO、BO、DO、DAO、DTO、POJO是什么意思?
  • MFC读取PC6408板卡输入信号实例
  • @Async的使用说明
  • 经验笔记:SQL调优
  • Selenium使用浏览器用户配置进行测试
  • virsh命令的使用
  • 【来学Vue吧】创建一个Vue项目
  • C#迭代器方法和yield用法
  • 斗破C++编程入门系列之二十六:数组、指针和字符串:动态内存分配和释放(一星斗师)
  • Servlet 和 Spring Boot 的请求处理流程区别和例子
  • C++笔记之map的实用操作
  • Lombok失效:报错 找不到符号 Springboot项目
  • Linux 基础命令-文件与目录操作
  • Delphi 12.1安卓APP开发中获取硬件信息及手机号
  • STM32 - 笔记4
  • 【H2O2|全栈】更多关于HTML(1)HTML进阶(一)
  • 新160个crackme - 053-devilz KeyGen me#3
  • ORA-12514
  • MyBatis-PlusDruid数据源