C99标准引入的指定初始化器(Designated Initializers),是一种更清晰、更安全的结构体初始化方式。
语法解释
{ .led_gpio_pin = LED0_GPIO_PIN }
- `.led_gpio_pin` 表示要初始化的具体成员名称
- `= LED0_GPIO_PIN` 给该成员赋值
- 其他未指定的成员会自动初始化为0(对于静态存储期的变量)
与传统写法的对比
传统写法(按顺序初始化):
static struct onoff_state onoff_state[] = {
{ 0, LED0_GPIO_PIN }, // 必须记住成员顺序
};
指定初始化器写法:
static struct onoff_state onoff_state[] = {
{ .led_gpio_pin = LED0_GPIO_PIN }, // 明确指定成员,顺序无关
};
优势
1. 可读性更强:明确知道哪个值赋给哪个成员
2. 顺序无关:不用记住结构体成员的声明顺序
3. 灵活性高:可以只初始化部分成员
4. 易于维护:结构体成员顺序变化时,初始化代码不受影响
更多示例
// 只初始化部分成员
{ .led_gpio_pin = LED0_GPIO_PIN }
// 初始化多个成员(顺序任意)
{ .onoff = 1, .led_gpio_pin = LED2_GPIO_PIN }
// 或者
{ .led_gpio_pin = LED2_GPIO_PIN, .onoff = 1 }
// 数组的多个元素
static struct onoff_state onoff_state[] = {
{ .led_gpio_pin = LED0_GPIO_PIN },
{ .onoff = 1, .led_gpio_pin = LED1_GPIO_PIN },
{ .led_gpio_pin = LED2_GPIO_PIN, .onoff = 0 },
};
这种写法在现代C语言编程中很常见,特别是在嵌入式开发和系统编程中。

380

被折叠的 条评论
为什么被折叠?



