C语言标记化结构初始化语法扫盲
来源:互联网 发布:手机淘宝直播入口在哪 编辑:程序博客网 时间:2024/05/16 01:01
以前在学习C语言时听说过所谓的C语言标记化结构初始化语法,但当时出于偷懒就没有细究。最近学习Linux设备驱动,就对它的结构体初始化写法感到奇怪,所有的初始化代码都写清了变量名,并且变量名前面还有一个诡异的点。又遇到了,就查了一下,长见识了啊,此种初始化写法并不是什么特殊的代码风格,而是所谓的C语言标记化结构初始化语法(designated initializer),而且还是一个ISO标准。
#include <stdio.h>#include <stdlib.h>struct Snooy{ int data; void (*func1)(char*); void (*func2)(char*); char name[100];};void func1(char *chp){ printf("This is func1 test!\n>>%s\n",chp);}void func2(char *chp){ printf("This is func2 test!\n>>%s\n",chp);}int main(void) { struct Snooy val = { .data = 1024, .func2 = func2, .func1 = func1, .name = "Snooy test!" }; val.func1("Hello test func1!"); val.func2("Hello test func2!"); return 0;}
首先,标记传参不用理会参数传递的顺序,正如我上面的例子表示的那样,我是先初始化了read2,然后再初始化了read1,程序员不用记忆参数的顺序;
其次,我们可以选择性传参,在传统C语言顺序传参中,如果你只想对第三个变量进行初始化,那么你不得不给第一个, 第二个参数进行初始化,而有时候一个变量并没有很合适的默认值,而使用标记初始化法,你可以相当自由地对你有把握的参数进行初始化;
第三,扩展性更好,如果你要在该结构体中增加一个字段,传统方式下,为了考虑代码修改量,你最好将新添加的字段放在这个结构体的最后面,否则你将要面对大量且无趣的修改,你可能觉得放在哪里没什么关系,但是我们都习惯了,姓名下面是性别,性别下面是年龄,接着是兴趣爱好,最后是事迹描述,如果年龄放在了最后面,难道不别扭么?!
这下算是整明白点了,原来这个规则有这些好处,看来我的C语言功底有待提高啊!孤陋寡闻啊!
- C语言标记化结构初始化语法扫盲
- 标记化结构初始化语法(C语言)
- C语言标记化结构初始化语法
- 标记化结构初始化语法(C语言)
- 标记化结构初始化语法(C语言)
- 标记化结构初始化语法(C语言)
- 标记化结构初始化语法(C语言)
- C语言:标记化结构初始化语法
- C的标记化结构初始化语法
- c的标记化结构初始化语法
- c语言之遗漏---标准C的标记化结构初始化语法
- 标记化结构初始化语法
- 标记化结构初始化语法
- 标准C的标记化结构初始化语法
- C 标记化结构初始化语法 点运算符
- 标准C的标记化结构初始化语法
- 标准C的标记化结构初始化语法
- 标准C的标记化结构初始化语法
- 内存搜索、修改器(附VC6源码)
- stm32 串口用校验
- sizeof() 与strlen()
- 带名字的成绩单
- achejq
- C语言标记化结构初始化语法扫盲
- XFS 文件系统 mount 参数翻译
- 第十六周上机任务-项目4-指来指去
- 字符串的复制和统计字符数量(第十六周上机任务)
- 折腾二维数组
- 第十六周上机项目1:统计每一个数字字符出现的次数
- MFC子窗口和父窗口(SetParent,SetOwner)
- 2012-12-11---深圳
- bfd库