Компиляция кода C с анонимными структурами/объединениями
Возникает вопрос относительно того, как скомпилировать код C с анонимными структурами или объединениями, как показано в C с анонимными полями с использованием объединений. В C попытка создать аналогичную структуру с использованием именованных структур, содержащих анонимное объединение, приводит к ошибкам компиляции.
Сообщения об ошибках указывают на то, что поля анонимного объединения и структуры не объявлены в объявлении структуры. Чтобы включить эту функцию в C, необходимо использовать флаг компилятора -fms-extensions.
Пересмотренный код с -fms-extensions
#include
#include
typedef struct {
union {
float x, y, z;
} xyz;
} Vector3;
int main() {
Vector3 v;
assert(&v.xyz.x == &v.x);
assert(&v.xyz.y == &v.y);
assert(&v.xyz.z == &v.z);
return 0;
}
Благодаря этой модификации код будет успешно скомпилирован и утверждения пройдут, подтверждая, что адреса членов объединения и полей структуры эквивалентны.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3