【问题标题】:"Dot initialization syntax" in C [duplicate]C中的“点初始化语法”
【发布时间】:2021-10-16 14:13:36
【问题描述】:

我遇到了一些具有不寻常结构初始化语法的 C 代码。

struct spi_ioc_transfer tr = {
    .tx_buf = (unsigned long)tx,
    .rx_buf = (unsigned long)rx,
    .len = ARRAY_SIZE(tx),
    .delay_usecs = delay,
    .speed_hz = speed,
    .bits_per_word = bits,
};

首先,我不知道这叫什么。这被称为什么?也许是我在问题标题中建议的“点初始化语法”?没遇到过,不知道怎么形容。

其次,这是编译时有效的 C 代码,但是这是 C 的什么方言,它是什么时候引入的? (它是 C11 中的新功能吗?)

第三,如果结构的某些成员被省略,这些成员是否被初始化为零。如果没有,有没有办法初始化结构,使省略的成员为零。

(例如spi_ios_transfer还包含一个字段cs-change,此处已省略。)

最后这在 C++ 中是否也允许,它是否适用于 C++ 类?

【问题讨论】:

标签: c struct


【解决方案1】:

首先,我不知道这叫什么。

指定初始化器

其次,这是编译时有效的 C 代码,但是这是 C 的什么方言,它是什么时候引入的? (它是 C11 中的新功能吗?)

C99 及更高版本

第三,如果结构的某些成员被省略,这些成员是否被初始化为零。

是的

最后这在 C++ 中也是允许的,它是否适用于 C++ 类?

它是在 C++20 中引入的

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 2014-06-21
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多