繁体   English   中英

C Struct初始化:奇怪的方式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM