struct 定义和初始化语法疑问
这是使用FUSE文件系统中的代码,对于
问题1:为什么有 “=” ?
struct fuse_operations bb_oper = { ... }
问题2:下面的这个语法规则是初始化吗?第一次见到感觉很奇怪
.getattr = bb_getattr
附录:
结构体
struct fuse_operations bb_oper = {
.getattr = bb_getattr,
.readlink = bb_readlink,
.getdir = NULL,
.mknod = bb_mknod,
.mkdir = bb_mkdir,
.unlink = bb_unlink,
.rmdir = bb_rmdir,
.symlink = bb_symlink,
.rename = bb_rename,
......
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是定义时初始化结构体的方式
这种写法可以给指定字段赋值
struct fuse_operations bb_oper = { ==> 为什么有=号? 支持这种写法,新语法支持
.getattr = bb_getattr, ==>这样的写法是初始化吗? 是的
.readlink = bb_readlink,
......
};
最开始的C语法中并不支持这种写法,直至C99规范中添加了这样的designated initializer(Syntactic Sugar语法糖),这种语法对结构变量进行初始化,显得很直观,同时也要注意这里面的小细节:
如果结构中的一些域,我没有添加初始化,会发生什么?
规范上写是说无定义/未知,而GCC在实现上会把这些域初始化为0(我从C的角度来理解)