我想在不显式分配每个成员的情况下,通过为成员分配一个 "匹配 "的结构来初始化一个结构的几个成员。
为了更好地解释这个问题,下面是一个例子。我有两个结构,我想初始化成员ThingB。
typedef struct
{
void* ThingB;
void* ThingC;
}SomeThings_S;
typedef struct
{
void* ThingA;
void* ThingB;
void* ThingC;
}AllThings_S;
我想通过直接将Somethings_S赋值给AllThings_S中的成员ThingB和ThingC来初始化成员。请看下面的内容。
void* ThingA;
void* ThingB;
void* ThingC;
SomeThings_S SomeThings =
{
ThingB,
ThingC,
};
AllThings_S AllThings =
{
.ThingA = ThingA,
SomeThings, <--- This is where I'm not sure how to proceed.
}
我可以做到以下几点
AllThings_S AllThings =
{
.ThingA = ThingA,
.ThingB = SomeThings.ThingB,
.ThingC = SomeThings.ThingC,
}
但这是我想避免的。我更希望能直接将Somethings分配给AllThings中的ThingB和ThingC。
对不起,我不知道该怎么做。我很难尝试和解释。希望能看懂。
如果你 真的 想这样做--我想强调的是,我真的不建议这样做--你可以利用的。-fplan9-extensions
或 -fms-extensions
选项,允许你直接访问匿名结构的成员。 如果使用clang,使用 -fms-extensions
因为它没有plan9的扩展,最后我知道。
它可能是什么样子的。
#include <stdlib.h>
#include <stdio.h>
typedef struct
{
void* ThingB;
void* ThingC;
}SomeThings_S;
typedef struct
{
void* ThingA;
SomeThings_S;
}AllThings_S;
int main(void) {
int a;
int b;
int c;
SomeThings_S x = {&a,&b};
AllThings_S y = {&c, x};
printf("%p, %p, %p\n", y.ThingA, y.ThingB, y.ThingC);
return EXIT_SUCCESS;
}
我用一个匿名的联合和结构解决了这个问题。