Я могу сделать это в c ++ / g ++:
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);
буду работать.
Как это сделать в c с помощью gcc? у меня есть
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 должен предупреждать о непереносимых анонимных структурах. - person greyfade   schedule 29.12.2009union vec3 { ... }
), и вы, вероятно, должны назвать членxyz
чем-нибудь другим, кромеxyz
. Что-то вродеe
илиcomps
работает нормально. - person bobobobo   schedule 24.02.2012xyz
как о swizzle-доступе, ala GLSL, даже если это не имеет большого смысла. Хотя, наверное, сейчас я бы использовалdata
. В первую очередь я использую C ++, поэтому я бы избегал всего этого и использовал функцию, которая в настоящее время возвращает ссылку на элемент данных иoperator[]
для индексированного доступа. - person solinent   schedule 28.02.2012