硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1769|回复: 1
收起左侧

结构体的初始化器

[复制链接]

32

主题

298

回帖

394

积分

高级会员

积分
394
发表于 2020-2-21 10:09:20 | 显示全部楼层 |阅读模式
最近看硬汉写的RTX5代码,
结构体初始化赋值,看代码很简单和灵活:
  1. const osThreadAttr_t ThreadMsgPro_Attr =
  2. {
  3.     .name = "osRtxMsgProThread",
  4.     .attr_bits = osThreadDetached,
  5.     .priority = osPriorityHigh3,
  6.     .stack_size = 1024,
  7. };
复制代码


摘录了C Primer Plus第6版443页相关章节的内容,
可以更直观的理解采用这种方式的优势就在于由此初始化不必严格按照定义时的顺序。带来了极大的灵活性。
已知一个结构,定义如下
struct book {
    char title[MAXTITL];
    char author[MAXAUTL];
    float value;
};
C99支持结构的指定初始化项目,其语法与数组的指定初始化项目近似。

只是,结构的指定初始化项目使用点运算符和成员名(而不是方括号和索引值)来标识具体的元素。
例如,只初始化book结构的成员value,可以这样做:
    struct book surprise = { .value = 10.99 };
    可以按照任意的顺序使用指定初始化项目:
   
  1. <span style="color: rgb(77, 77, 77); font-family: 'Microsoft YaHei', 'SF Pro Display', Roboto, Noto, Arial, 'PingFang SC', sans-serif;"> struct book gift =</span>
复制代码

    正像数组一样,跟在一个指定初始化项目之后的常规初始化项目为跟在指定成员后的成员提供了初始值。另外,对特定成员的最后一次赋值是它实际获得的值。例如,考虑下列声明:
    struct book gift =

    {
        .value = 18.90,
        .author = "Philionna pestle",
        0.25

};
    这将把值0.25赋给成员value,因为它在结构声明中紧跟在author成员之后。

新的值0.25代替了早先的赋值18.90。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2020-2-21 10:49:17 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 04:15 , Processed in 0.037943 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表