具有默认初始化的 C 结构定义?

Posted

技术标签:

【中文标题】具有默认初始化的 C 结构定义?【英文标题】:C structure definition with default initialization? 【发布时间】:2022-01-05 08:38:51 【问题描述】:

很抱歉问这个问题,因为我确信它已经得到了回答,但是我在过去 30 分钟内尝试搜索不同的术语,但没有找到类似的定义。

struct 
    volatile uint8_t tail;
    uint8_t buf[128];
 uart = 0,0;

上面的结构体定义中,我不明白“= 0,0”最后的目的是什么。

这叫什么?它的目的是什么?

如果我冒险猜测,它是某种默认值初始化器,猜测它会将 tail 设置为 0,并且当定义“uart”类型的新变量时,数组填充为 0。这可能是某些问题的重复,我错过了它所需的关键字。

编辑: 刚刚有了另一个想法……这是某种内联结构定义并初始化一个名为 uart 的变量吗? IE,它没有定义一个名为 uart 的结构,而是定义了一个名为 uart 的变量,内联结构定义,然后设置值。非常不寻常,如果是这样的话。我从未想过内联结构定义。

【问题讨论】:

第二个。 这只是一个草率的结构。通常,所有结构都使用 typedef 创建,然后您分别创建该 typedef:ed 结构的实例。 【参考方案1】:

C 中没有默认初始化,因为 C 对象没有构造函数。

唯一的例外:未初始化的静态存储持续时间对象为零。

uart = 0,0;

它用两个零隐式初始化uart 变量。最好写成0, 0,,因为第二个成员是一个数组。

【讨论】:

所以它正在初始化一个 uart 变量并定义内联结构。我从来没有见过这样的内联定义。感谢您的确认。

以上是关于具有默认初始化的 C 结构定义?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中定义了结构体一定要先进行初始化么?如果不初始化直接使用会有啥后果?

如何初始化(或分配)具有特定默认值的结构(抽象数据类型)成员的值

c语言,结构体数组怎么初始化

c语言如何对结构体某一成员初始化

具有聚合初始化的 C++11 构造函数委托

初始化 c 风格的结构