C Struct初始化:奇怪的方式

sud*_*03r 2 c struct initialization

在阅读我遇到的代码时,结构的以下定义和初始化:

// 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;
}
Run Code Online (Sandbox Code Playgroud)

这在C中意味着什么?它与通常的声明有什么不同?

Jac*_*cob 6

它被称为指定初始化,

在结构初始值设定项中,指定要.fieldname =在元素值之前初始化的字段的名称 .例如,给定以下结构,

 struct point { int x, y; };
Run Code Online (Sandbox Code Playgroud)

以下初始化

 struct point p = { .y = yvalue, .x = xvalue };
Run Code Online (Sandbox Code Playgroud)

相当于

 struct point p = { xvalue, yvalue };
Run Code Online (Sandbox Code Playgroud)

如果您继续阅读,它会解释.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
};
Run Code Online (Sandbox Code Playgroud)

你能编译吗?我用过TCC.