gpt4 book ai didi

c - 匿名结构

转载 作者:行者123 更新时间:2023-12-02 07:28:19 25 4
gpt4 key购买 nike

我需要一个嵌入到结构测试中的匿名结构,这样它的设置如下:

#include <stdio.h>

struct test {
char name[20];

struct {
int x;
int y;
};
};

int main(void) {
struct test srs = { "1234567890123456789", 0, 0 };
printf("%d\n", srs.x); // I can access x property without having to go to go within another struct
return 0;
}

这样我就可以访问 x 和 y 属性,而无需进入另一个结构。

但是我希望能够使用在别处声明的结构定义,如下所示:

struct position {
int x;
int y;
}

我无法编辑上面的结构!

因此,例如,一些伪代码可能是:

#include <stdio.h>

struct position {
int x;
int y;
};

struct test {
char name[20];

struct position;
};

int main(void) {
struct test srs = { "1234567890123456789", 0, 0 };
printf("%d\n", srs.x); // I can access x property without having to go to go within another struct
return 0;
}

但是这给出了:

warning: declaration does not declare anything
In function 'main':
error: 'struct test' has no member named 'x'

更新:一些评论者想知道如何初始化这样一个结构,所以我写了一个简单的程序供您试验,确保按照答案使用 -fms-extensions 进行编译!

#include <stdio.h>

struct position {
int x;
int y;
};

struct test {
char name[20];

struct position;
};

int main(void) {
struct test srs = { "1234567890123456789", 1, 2 };
printf("%d\n", srs.x);
return 0;
}

输出是 1,这是您所期望的。

没有必要:

struct test srs = { "1234567890123456789", { 1, 2 } };

但是,如果您这样做,它会给出相同的输出且没有警告。

我希望这能澄清!

最佳答案

根据 c11 标准,可以在 gcc 中使用匿名结构。使用 -fms-extensions 编译器选项将允许您需要的匿名结构特性。

文档的相关摘录:

Unless -fms-extensions is used, the unnamed field must be a structure or union definition without a tag (for example, ‘struct { int a; };’). If -fms-extensions is used, the field may also be a definition with a tag such as ‘struct foo { int a; };’, a reference to a previously defined structure or union such as ‘struct foo;’, or a reference to a typedef name for a previously defined structure or union type.

引用:this page获取更多信息。

关于c - 匿名结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25217505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com