Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 3 wrz 2025, o 06:16


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
 Tytuł: enum, wskaźnik
PostNapisane: 22 kwi 2017, o 21:32 
Offline
Użytkownik

Dołączył(a): 09 mar 2014
Posty: 26
Pomógł: 0

Witam.
Mam takie pytanie w zasadzie o podstawy.
Tworzę sobie kilka typów enum np:

Kod:
enum  A {menu1, menu2, menu3, menu4, menu5, menu6};
enum B {poziom1 = 2, poziom2, poziom3, poziom4};
enum A a;
enum B b;


Wykonałem sobie test na wyświetlaczu i zauważyłem, że domyślenie taki typ enum jak wyżej ma zakres jak typ uint8_t.
W związku z tym stwierdziłem, że utworzę sobie funkcję do której będę mógł przekazać każdy z tak utworzonych typów enum.
(podany przykład jest teoretyczny podobny do tego co mam u siebie w programie).

Kod:
void position_menu (uint8_t *poz_m, uint8_t min_poz, uint8_t max_poz, uint8_t exit_p){
       *poz_m += ENCODER (1);
   if(*poz_m<min_poz) *poz_m = max_poz;
   if(*poz_m>max_poz) *poz_m = min_poz;

   if (button(1)){
      if(*poz_m == max_poz) a = exit_p;
      else a = *poz_m;
   }
}


Potem w programie wywołuję funkcję

Kod:
void position_menu (&b, poziom1, poziom5, menu1);


Sprawdzałem i taka funkcja działa ale może czegoś nie wiem.
Dlatego pytam czy takie przekazywanie typów enum do funkcji jest poprawne ?.
Funkcja ma pracować z różnymi typami enum.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2017, o 11:23 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1085
Pomógł: 73

Witam,
działać to będzie bo kompilator enum traktuje jako zmienną typu np. uint8_t jak w Twoim przypadku.
Jednak moim zdaniem, bardziej czytelniejszy kod byłby gdybyś jako argumentów funkcji używał typów enum.

Czyli coś takiego:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dodałem też jawne rzutowanie bo nie wiem co zwraca funkcja ENCODER. To jest moje zdanie, osobiście stosuję taką technikę i uważam że jest to dobry styl programowania. Może ktoś bardziej doświadczony się wypowie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2017, o 14:14 
Offline
Użytkownik

Dołączył(a): 09 mar 2014
Posty: 26
Pomógł: 0

Cytuj:
działać to będzie bo kompilator enum traktuje jako zmienną typu np. uint8_t jak w Twoim przypadku.

Dzięki :) o to mi chodziło.
Podałem typ uint8_t ponieważ ta sama funkcja ma pracować z nieco większą liczbą typów enum ;)
Ale zgadzam się, w takim przypadku jak podałem twoje rozwiązanie jest bardziej czytelnie.
Dzięki ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO