Sandbox 4 - Funkcje ze zmienną ilością argumentów - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Sandbox 4 - Funkcje ze zmienną ilością argumentów (/watek-sandbox-4-funkcje-ze-zmienn%C4%85-ilo%C5%9Bci%C4%85-argument%C3%B3w) |
Sandbox 4 - Funkcje ze zmienną ilością argumentów - wojtekizk - 03-02-2016 Witam w kolejnej odsłonie :-) Tym razem we wiaderku mam łopatkę celem przekopania tematu zastosowania funkcji ze zmienną ilością argumentów. Pomysł ten urodził się podczas pisania kodu dla jednego z naszych kolegów. Potrzebowałem funkcji, w której będę mógł dowolnie zmieniać ilość argumentów. Do czego to może być przydatne? Na przykład do sterowania danymi wyświetlanymi na naszym LCD. Wymagania są dość wygórowane - nie wiem ile linii ma wyświetlacz i nie mam pojęcia co trzeba będzie wyświetlić w każdej linii. A chciałbym mieć funkcję, w której będę mógł sterować miejscem i typem danych do wyświetlenia. Na szczęście specyfikacja języka C pozwala na taką konstrukcję - czyli funkcję ze zmienną ilością argumentów. Przykład - zamiast: Kod: float temperatura=23.45; ... za pomocą naszej funkcji możemy napisać:-) Kod: float temperatura=23.45; Funkcja ekran - jest właśnie przykładem funkcji ze zmienną ilością argumentów. Cały dowcip polega na tym, że najpierw definiujemy tzw. "ciąg formatujący" a potem wstawiamy dane do wyświetlenia, zgodnie z tym ciągiem właśnie :-) Co zyskuję - możliwość formatowania danych do wyświetlenia za pomocą jednej linii kodu. Co tracę - kilkadziesiąt bajtów, bo trzeba do naszego kodu wkleić ciało tej przykładowej funkcji: Kod: // --- uniwersalna funkcja ekran ... by wojtekizk ------------------- Na życzenie mogę dokładnie opisać jakie "czary" tu się robi. Myślę jednak, że da się wykumać o co tu biega :-) Przykłady wywołań (robię właśnie menu do obsługi 3 akwariów dla naszego kolegi): Kod: ekran("IISIISIISIIS",0,0,"<TEMP.>",9,0,"OSWIE.",0,1," WENT.",9,1,"TIMER"); Pozdrawiam |