Использование нескольких структур одного типа в объединении - PullRequest
2 голосов
/ 22 марта 2019

В настоящее время у меня есть структура, которая содержит список логических значений того же типа, например:

typedef unsigned char U8
typedef struct
{
  U8  A1
  U8  A2
  U8  A3
  U8  B1
  U8  B2
  U8  B3
} NewStruct;

Я пытаюсь использовать объединение, чтобы разделить эти элементы на группу A и группу B (поскольку группы на самом деле содержат более 100 переменных), можно вызвать группу A или группу B и сохранить часть памяти в процессе:

typedef unsigned char U8
typedef union
{
    typedef struct
    {
      U8  A1
      U8  A2
      U8  A3
    } NewStruct_1;

    typedef struct
    {
      U8  B1
      U8  B2
      U8  B3
    } NewStruct_2;
} NewUnion;

Я немного новичок в C, и я не разобрался с этимс профсоюзами.Мне интересно, будет ли это адекватным / полезным способом урегулирования ситуации.

Спасибо

1 Ответ

1 голос
/ 22 марта 2019

Нередко использовать объединение двух похожих структур. (Нельзя сказать, что это хорошо в вашей конкретной ситуации без дополнительной информации.)

Правильный синтаксис:

typedef unsigned char U8;
typedef union
{
    struct
    {
        U8  A1;
        U8  A2;
        U8  A3;
    } NewStruct_1;

    struct
    {
        U8  B1;
        U8  B2;
        U8  B3;
    } NewStruct_2;
} NewUnion;

Кроме того, удаление имен из внутренних элементов структуры делает их анонимными, а затем элементы A1, A2, A3, B1, B2 и B3 выглядят так, как если бы они были члены внешнего союза:

typedef unsigned char U8;
typedef union
{
    struct
    {
        U8  A1;
        U8  A2;
        U8  A3;
    };

    struct
    {
        U8  B1;
        U8  B2;
        U8  B3;
    };
} NewUnion;

Тогда, если x является NewUnion, вы можете использовать x.A1 вместо x.NewStruct_1.A1.

...