[英]C Struct initialization : strange way
在阅读我遇到的代码时,结构的以下定义和初始化:
// header file
struct foo{
char* name;
int value;
};
//Implementation file
struct foo fooElmnt __foo;
// some code using fooElmnt
struct foo fooElmnt __foo = {
.name = "NAME";
.value = some_value;
}
这在C中意味着什么?它与通常的声明有什么不同?
它被称为指定初始化 ,
在结构初始值设定项中,指定要在元素值之前使用
.fieldname =
初始化的字段的名称。 例如,给定以下结构,struct point { int x, y; };
以下初始化
struct point p = { .y = yvalue, .x = xvalue };
相当于
struct point p = { xvalue, yvalue };
如果你继续阅读,它解释了.fieldname
被称为指示符 。
更新:我不是C99专家,但我无法编译代码。 这是我必须做出的改变:
// header file
struct foo{
char* name;
int value;
};
//Implementation file
//struct foo fooElmnt __foo;
// some code using fooElmnt
struct foo fooElmnt = {
.name = "NAME",
.value = 123
};
你能编译吗? 我用过TCC 。
这些是指定的初始化器,在c99中引入。 你可以在这里阅读更多
没有他们,你会使用
struct foo fooElmnt __foo = {
"NAME",
some_value
};
虽然在这种情况下它并不重要 - 除了c99方式更冗长,并且更容易阅读哪个元素被初始化为什么。
如果你的struct有很多成员并且你只需要将其中的一些初始化为零以外的东西,它确实有帮助。
这是一个指定的初始化。 这也是通过名称初始化字段,这比结构变大时的异步初始化更具可读性。 这是由C99标准引入的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.