
再次因C99栽跟头之结构体变量初始化问题
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本文探讨了在编程中使用C99标准时遇到的结构体变量初始化问题,并提供了详细的分析和解决方案。适合对C语言深入学习有兴趣的技术爱好者阅读。
C99 标准引入了标记化结构初始化语法,使得结构体变量的初始化更加灵活方便。这种语法使用点运算符和成员名来标识具体的元素,并可以按照任意顺序指定初始值,不必严格按照定义时的顺序进行。
在 C89 标准中,结构体变量的初始化采用大括号 {} 进行。而在 C99 版本中,则采用了更易读的标记化初始化方式。这种方式的优势在于对结构体成员的赋值可以按照任意顺序进行,提高了代码可读性和灵活性。
例如,给定一个名为 `struct book` 的结构体变量:
```c
struct book {
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
```
使用标记化初始化方式如下所示:
```c
struct book surprise = {.value = 10.99 };
```
或者可以按照任意顺序进行指定初始值,例如:
```c
struct book gift = { .value = 25.99, .author = James Broadfool, .title = Rue for the Toad };
```
另外,对特定成员的最后一次赋值是它实际获得的值。例如,在下面的声明中:
```c
struct book gift = { .value = 18.90, .author = Philionna pestle, 0.25};
```
这将把值 `0.25` 赋给成员 `value`,因为它在结构体定义中的位置紧跟在 `author` 成员之后。新的赋值 `0.25` 替代了早先的赋值 `18.90`。
需要注意的是,要检查使用的编译器是否支持 C99 标准。通常情况下,GCC 是更新最快的,并且大多数嵌入式开发常用的 IAR、Keil 和 Codewarrior 10.x 编译器均可以支持 C99 的标准。
在嵌入式开发中,结构体变量是我们经常使用的类型之一,对其进行初始化也是必不可少的操作。因此了解 C99 标准中的新的结构体变量初始化方式非常重要。
本段落旨在分享笔者研究飞思卡尔新出的基于 Kinties 的底层驱动库 Kinetis SDK 时遇到的一个小问题:即关于如何正确地进行结构体变量的初始化。通过深入的研究和实践,终于弄明白了 C99 标准中新的结构体变量初始化方式,并总结了经验笔记以供他人参考。
C99 标准中的这种结构体变量初始化方法是一种非常灵活且方便的方式,可以提高代码可读性和灵活性。但需要注意的是,要确保使用的编译器支持相应的标准版本,以免出现兼容性问题。
全部评论 (0)


