具有默认初始化的 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语言中定义了结构体一定要先进行初始化么?如果不初始化直接使用会有啥后果?