extern wm_event_group_t const my_event_group;中extern的作用

extern wm_event_group_t const my_event_group;

wm_event_group_t 是一个类型定义,它决定了 my_event_group 变量的类型。我们之前已经看到,wm_event_group_t 是通过 typedef 定义的:

typedef const char *wm_event_group_t;

wm_event_group_t 的作用:

  1. 类型别名wm_event_group_tconst char* 的一个类型别名,也就是说它实际上是指向一个常量字符串的指针。这个字符串表示事件组的名称或者标识符。通过 typedef,你可以用更有意义的名字 wm_event_group_t 代替原本的 const char*,让代码更易读。

  2. 提高代码可读性和可维护性: 使用 wm_event_group_t 可以让你的代码更具语义化。例如,在代码中你处理的实际上是事件组,而不是一般的字符串指针。用 wm_event_group_t 作为类型能够提醒开发者这个变量表示的是事件组,而不是普通的字符串。

在上下文中的作用:

  • wm_event_group_t 的作用是定义 my_event_group 变量的类型,表示它是一个指向 const char* 的指针(即它指向一个字符串常量)。
  • my_event_group 实际上是事件组的名称,表示某个特定的事件组。比如 "MY_EVENT_GROUP",这个事件组名称在系统中用来区分不同的事件类别。

例子:

假设你定义了一个事件组:

wm_event_group_t const my_event_group = "MY_EVENT_GROUP";

这里,my_event_group 是一个指向 "MY_EVENT_GROUP" 字符串的指针,而这个字符串用于标识某个事件组。通过 wm_event_group_t 这个类型,代码更清晰地表达了这是一个事件组标识符,而不是普通的字符串。

总结:

  • wm_event_group_tconst char* 的别名,用于表示事件组名称。
  • 它的主要作用是提高代码的可读性,明确指明这是与事件组相关的标识符,而不是普通的字符串。

问题2:既然wm_event_group_t代表了const char * 那为什么wm_event_group_t修饰的 my_event_group还要加上const呢?

区分两个 const 的作用

为什么要加上两个 const

这种双重保护可以避免开发中的潜在错误,确保事件组名称和指针都不会被意外修改。

例子:

  1. wm_event_group_t (typedef const char *): 由于 wm_event_group_tconst char * 的别名,意味着这个指针(char*)指向的内容(字符串)是常量,不能被修改。这表示:

    wm_event_group_t my_event_group;
    // 等价于
    const char *my_event_group;
    

    在这种情况下,你不能修改 my_event_group 指向的字符串内容,例如:

    *my_event_group = 'A';  // 错误,不能修改常量字符串的内容
    
    

  2. const wm_event_group_t my_event_group: 当你在 wm_event_group_t 前面再加上 const,就相当于在 const char* 的基础上,声明这个指针本身也是常量,即 my_event_group 这个指针不能被修改。它的作用是:

    wm_event_group_t const my_event_group;
    // 等价于
    const char * const my_event_group;
    

    这表示不仅不能修改指针指向的字符串内容,还不能修改指针本身指向的地址。例如:

    my_event_group = "NEW_GROUP";  // 错误,不能修改指针指向的地址
    

    两个 const 的作用总结

  3. 第一个 const(在 typedef 中定义的 const char*):确保指针指向的字符串内容是只读的,不能被修改。
  4. 第二个 const(在 extern wm_event_group_t const 中的 const):确保指针本身是只读的,不能被重新指向其他地址。
  5. 保护指针指向的字符串wm_event_group_t(即 const char*)保证了你不能修改事件组的字符串内容,这通常用于字符串常量。

  6. 保护指针本身:再加上 const 关键字保护了指针本身,确保 my_event_group 始终指向同一个事件组名称,不能被重新指向其他的字符串。

// 定义了一个事件组,指向常量字符串
wm_event_group_t const my_event_group = "MY_EVENT_GROUP";

// 不允许修改 my_event_group 指向的字符串内容
*my_event_group = 'A';  // 错误

// 不允许修改 my_event_group 本身的地址
my_event_group = "NEW_GROUP";  // 错误

这个定义确保了事件组 my_event_group 指向的字符串是固定且不可变的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值