struct vec3 {
union {
struct {
float x, y, z;
};
float xyz[3];
};
};
然后,
vec3 v;
assert(&v.xyz[0] == &v.x);
assert(&v.xyz[1] == &v.y);
assert(&v.xyz[2] == &v.z);
会工作。
如何在使用gcc的C语言中实现这个?我有。
typedef struct {
union {
struct {
float x, y, z;
};
float xyz[3];
};
} Vector3;
但是我到处都遇到错误,尤其是在这个地方。
line 5: warning: declaration does not declare anything
line 7: warning: declaration does not declare anything
-Wall
йҮҚж–°зј–иҜ‘жӮЁзҡ„д»Јз ҒгҖӮGCCеә”иҜҘдјҡиӯҰе‘ҠжӮЁжңүе…ійқһеҸҜ移жӨҚеҢҝеҗҚз»“жһ„зҡ„й—®йўҳгҖӮ - greyfadeunion vec3 { ... }
),而且你可能应该将xyz
成员命名为其他名称,比如e
或comps
。 - boboboboxyz
看作是一种 swizzle 访问方式,就像 GLSL 一样,即使这并没有太多意义。不过现在我可能会使用data
。我主要使用 C++,所以我会避免使用整个东西,而是使用一个返回数据成员引用的函数,以及用于索引访问的operator[]
。 - solinent