[C] Przekazywanie dwóch różnych struktur do jednej funkcji
Ostatnio zmodyfikowano 2017-07-13 11:22
sworduke Temat założony przez niniejszego użytkownika |
[C] Przekazywanie dwóch różnych struktur do jednej funkcji » 2017-07-12 15:02:40 Witam, Zaciąłem się na takim przypadku. Są dwie struktury danych o podobnej budowie, różnią się tylko długością bufora. Problem w tym, że muszę powielać wszystkie funkcje obsługujące te dane ponieważ nie mogę przekazać do funkcji innego typy danych (buffer_t, sbuffer_t) Jak zrobić, żeby można wywoływać zawsze tą samą funkcję niezależnie od przekazanej struktury? Pozdrawiam, sworduke
typedef struct sbuffer_t sbuffer_t; struct sbuffer_t { char data[ 10 ]; uint8_t index; uint16_t counter; };
typedef struct buffer_t buffer_t; struct buffer_t { char data[ 20 ]; uint8_t index; uint16_t counter; };
buffer_t XXX; sbuffer_t YYY;
void buffer_init( buffer_t * buffer ) { buffer->data[ 0 ] = '\0'; buffer->index = 0; buffer->counter = 0; }
void sbuffer_init( sbuffer_t * buffer ) { buffer->data[ 0 ] = '\0'; buffer->index = 0; buffer->counter = 0; }
buffer_init( XXX ); sbuffer_init( YYY );
|
|
DejaVu |
» 2017-07-12 15:18:15 Dziwny kod. Zamiast przekazywać strukturę możesz przekazać po prostu wskaźniki do poszczególnych pól. Wówczas algorytm masz uniwersalny. Przykład: void funkcjaX( int & _pole1, char *& _pole2, int & _pole3 ) { }
void funkcjaX( struktura1 & _s ) { funkcjaX( _s.pole1, _s.pole2, _s.pole3 ); }
void funkcjaX( struktura2 & _s ) { funkcjaX( _s.pole1, _s.pole2, _s.pole3 ); }
W C nie masz referencji, więc zastępujesz ją wskaźnikami, aby mieć bezpośredni dostęp do danych. |
|
sworduke Temat założony przez niniejszego użytkownika |
» 2017-07-13 11:22:13 OK, dzięki za pomysł. Nie wiem czy przyjmie mi to kompilator bo to jest system embedded ale spróbuję.
Pozdrawiam |
|
« 1 » |