c - 这是什么类型的C结构?

标签 c

这个结构代表什么?第一个方括号[last_ds_type]显示结构体的数组。像 [ds_1307] 这样的内部方括号怎么样? .nvram_offset.nvram_size 中的 . 是什么?

static struct chip_desc chips[last_ds_type] = {
  [ds_1307] = {
    .nvram_offset  = 8,
    .nvram_size  = 56,
  },
  [ds_1308] = {
    .nvram_offset  = 8,
    .nvram_size  = 56,
  },
  [ds_1337] = {
    .alarm    = 1,
    .century_reg  = DS1307_REG_MONTH,
    .century_bit  = DS1337_BIT_CENTURY,
  },
  [ds_1338] = {
    .nvram_offset  = 8,
    .nvram_size  = 56,
  },
  [ds_1339] = {
    .alarm    = 1,
    .century_reg  = DS1307_REG_MONTH,
    .century_bit  = DS1337_BIT_CENTURY,
    .trickle_charger_reg = 0x10,
    .do_trickle_setup = &do_trickle_setup_ds1339,
  },
  [ds_1340] = {
    .century_reg  = DS1307_REG_HOUR,
    .century_enable_bit = DS1340_BIT_CENTURY_EN,
    .century_bit  = DS1340_BIT_CENTURY,
    .trickle_charger_reg = 0x08,
  },
  [ds_1388] = {
    .trickle_charger_reg = 0x0a,
  },
  [ds_3231] = {
    .alarm    = 1,
    .century_reg  = DS1307_REG_MONTH,
    .century_bit  = DS1337_BIT_CENTURY,
  },
  [rx_8130] = {
    .alarm    = 1,
    /* this is battery backed SRAM */
    .nvram_offset  = 0x20,
    .nvram_size  = 4,  /* 32bit (4 word x 8 bit) */
  },
  [mcp794xx] = {
    .alarm    = 1,
    /* this is battery backed SRAM */
    .nvram_offset  = 0x20,
    .nvram_size  = 0x40,
  }
};

最佳答案

这个struct数组使用数组指定初始化程序语法将数组中的特定元素初始化为特定值。

每个标记(例如 ds_1307)很可能是一个计算为整数的宏。

.member 表示法是指定初始化程序的另一种形式,程序员使用它来初始化数组特定元素的成员。未显式设置的成员将设置为与实例具有静态存储持续时间时的值相同的值。

另请参阅what is a designated initializer in c?

关于c - 这是什么类型的C结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47203533/

相关文章:

c - main(int argc, char *argv[]) 损害了我的程序

c - 如何检查用户输入是否是某个字符

c - 垃圾值的来源是什么?

客户端端口号

C 使用指针从矩阵中提取数组

c - 没有明显段错误的编译器警告

c++ - 不同的 clang 和 gcc 行为与指针

Dev-Cpp 中的 C 代码在运行时中断

c - while循环变量更新

c++ - 将#warning 放入#define 的正文中