指定初始化(designated initialize)
来源:互联网 发布:js工厂方法 编辑:程序博客网 时间:2024/05/01 05:07
对linux内核代码中的结构体的初始化如:
struct device my_dev =
{
};
上面这种方式称为指定初始化(designated initialize)。它源自ISO C99标准。
C Primer Plus对这有比较详细的描述,我摘录如下:
已知一个结构体,定义如下
struct book
{
};
C99支持结构的指定初始化项目,其语法与数组的指定初始化项目近似。只是,结构的指定初始化项目使用点运算符和成员名来标识具体的元素。
例如,只初始化book结构的成员value,可以这样做:
struct book surprise = { .value = 10.99 };
可以按照任意的顺序使用指定初始化项目:
struct book gift =
{
};
正像数组一样,跟在一个指定初始化项目之后的常规初始化项目为跟在指定成员后的成员提供了初始值。另外,对特定成员的最后一次赋值是它实际获得的值。例如,考虑下列声明:
struct book gift =
{ .value = 18.90,
};
这将把值0.25赋给成员value,因为它在结构声明中紧跟在author成员之后。新的值0.25代替了早先的赋值18.90。
由上面书中的描述大家可以看的很清楚了,我再说一下使用时需要注意的几点:
1.结构体指定初始化时,用到的就是点运算符加上变量名的,不需要指明类型,程序会自动匹配。
2.右边的值类型尽量要匹配左边的类型
3.初始化时变量之间可以以逗号分开,也可以用分号分开。
4.整个结构体外面不要忘记加分号。
内核采用这种方式的原因在于初始化时不必严格按照定义时的顺序。这带来了极大的灵活性,其更大的益处还有待大家在开发
中慢慢体会。
- 指定初始化(designated initialize)
- C99 Designated initializers(结构体指定初始化)
- C99 Designated initializers(结构体指定初始化)
- iOS: 聊聊 Designated Initializer(指定初始化函数)
- iOS: 聊聊 Designated Initializer(指定初始化函数)
- 关于C99中的新特性:指定初始化 Designated initializers
- C语言的定制初始化(designated initializer)
- 指定初始化器designated initializer的意义以及[super init...]意义的个人心得
- 初始化NSDate为指定时间(Initialize a NSDate object with a specific time)
- Initialize Grid(初始化)
- Swift-初始化-initialize
- designated initializer:一种特殊的结构体初始化方法
- 类的加载(load)和初始化(initialize)
- 指定初始化
- 初始化-指定初始化
- [待添加]swift3.0 初始化方法中,你所不知道的事 Designated, Convenience, required
- .net chart 控件“Not initialize 3D Matrix(未初始化三维矩阵)”问题
- Objective-C的Initialize初始化方法研究
- 程序开发:目前主流开发技术的分析和总结
- QII中,用JTAG接口配置EPCS器件
- java 第二天笔记
- 软件设计的几条基本原则
- 逐渐打造一款强大的项目(请不要转载)4
- 指定初始化(designated initialize)
- UNIX / Linux Decompress tgz / tar.gz Files
- 一些能提高效率的搜索工具
- udev原理分析
- 没有爱的日子里(1)
- 跨站请求伪造及防范 Cross-Site Request Forgeries[CSRF]
- CentOS 6 rescue模式 初体验
- java 第3天笔记
- 增加datanode新节点