Łączenie kilku struktur w całość

0

Witam,

W pewnym pliku h mam kilkanaście struktur do sterowania peryferiami. W pamięci są rzutowane jeden za drugim.
Zawartość struktur się nie powtarza. Bardzo niewygodne jest, gdy chcę odwołać się do pewnej
zmiennej i muszę szukać która to jest struktura. Chciałbym połączyć je w całość.
Przykładowo:

typedef struct tagCR1 {
  unsigned int a;
} CR1;

typedef struct tagCR2 {
  unsigned int b;
} CR2;

typedef struct{
  /* 
  CR1
  CR2
  ... ?
*/
} CR;

int main(){
  CR cr;
  cr.a = 1;  // odwołanie się w wygodny sposób
  cr.b = 1;
  return 0;
}

Oczywiście mogę to zrobić w ten sposób(ctrl+c, ctrl+v):

typedef struct{
   struct{
     unsigned int a;
  };
  struct{
    unsigned int b;
  };
} CR;

Ale struktury są dość złożone i troche ich jest.
Co wpisać w mojej strukturze CR?

0

o takie coś chodzi?

struct CR {
    struct CR1 cr1;
    struct CR2 cr2;
};

a jeżeli nie, to zainteresuj się słowem union.

0
Azarien napisał(a):

o takie coś chodzi?

struct CR {
    struct CR1 cr1;
    struct CR2 cr2;
};

a jeżeli nie, to zainteresuj się słowem union.

Tak tylko trzeba odwołać się do crX, a tego chcę uniknąć. Union tutaj nie ma nic do rzeczy.
Mam np. 32 struktury gdzie zawarte zawarte są różne unikalne nazwy zmiennych, nazwy tych zmiennych znam, zaś nie wiem w których strukturach się znajdują. Muszę przeszukać struktury i się do niej odwołać, aby uzyskać dostęp do chcianej zmiennej. Chcę te struktury połączyć tak, aby odwołując się do zmiennej "b" nie zgadywać że znajduje się ona w rejestrze CR2.

0

Tutaj napisałem głupotę....

0

Takie cuda można by zrobić makrami, ale lepiej byłoby przemyśleć projekt, bo problem jest ogólnie dziwny.

0

Za cholerę nie mogę znaleźć przykładu - ale widziałem na pewno jakieś struktury tak porobione..
I chyba było to coś w ten deseń:

typedef struct
{
	int m_iX1;
} tmp1_s;

typedef struct
{
	int m_iX2;
} tmp2_s;

typedef struct
{
	tmp1_s m_s1;
	tmp2_s m_s2;

#define iX1 m_s1.m_iX1
#define iX2 m_s2.m_iX2

} defineInStruct_s;

//....gdzieś w funkcji

defineInStruct_s oS;
oS.iX1 = 1;
oS.iX2 = 2;
printf("## %d %d ##\n", oS.iX1, oS.iX2);

Tylko na przykład w eclipsie już nie podpowie tych define'ów.
O coś takiego Ci chodzi?

1 użytkowników online, w tym zalogowanych: 0, gości: 1