Image38 (5)

Image38 (5)



Programowanie


ABC... C Funkcje

Stworzenie nowej funkcji w C jest bardzo prosie. Tak naprawdę cały czas tworzymy przecież funkcje Do tej pory stworzyliśmy funkcję main, oraz za pomocą makra, funkcję obsługi przerwania. Były to tunkcje. standardowe. Teraz rozwiniemy tema: na tyle, aby móc utworzyć funkcję o dowolnej nazwie, dowolnych parametrach i dowolnej zwracanej wartości.


Nazwa funkcji • VC i d |WyswietlHex|

Typ zwracanej wartości j Lista wymaganych przez funkcję

parametrów


' iojjf

Identyfikator funkcji

raiiu« , :.n , 'iu a, juf j

J)anaWyawł«iUAe/«[2j »


■ pg*_r**«_Dyt«(4i|^lłjorCy;itv*r»l»*'•) );

orCyfr I(vax»» *■ )4f)x    ) :

pi}fi    »/OlCy5r    * ]);


Ciało funkcji (opia działania)


Na obrazku w tej ramce pokazałem z czego składa się definicja funkcji. Przykładowa funkcja zaczerpnięta z tworzonego aktualn e programu ina za zadanie wyświetlić podaną liczbę w kodzie hek-sadecymalnym. Nic skupiamy się teraz na tym, jak ona działa, ważne jest to, jak została zapisana. Funkcja składa się z informacji dla kompilatora, jaką wartość zwraca. Często, zamiast mówić opisowo, że Junkcja zwraca wartość typu (przykładowo) int, mówimy prosto, że funkcja jest typu int. W naszym przypadku używamy void. Jest :o bardzo specyficzny typ wartości, który... nie istnieje. W ten sposób informujemy kompilator, że funkcja nie zwraca wartości. Jeśli pisałeś programy w BASCOM-ie. może zakrzykniesz teraz - to już znamy tylko do tej pory funkcję niczwracającą danych nazywaliśmy procedurą (SUB). Znakomicie. jeśli zauważasz analogię. Teraz jednak zarówno procedury, jak i funkcję tworzy się tak samo. Różnica w zapisie polega tylko na poinformowaniu kompilatora, że nie chcemy zwracać żadnej wartości

Następnie pojawia się nazwa funkcji. Jest to identyfikator, więc nie może zaczynać się od cyfry. Poza tym może zawierać wszystkie litery alfabetu, jednak bez polskich ..ogonków”. Dodatkowo można wykorzystać znak podkreślenia. Przypominam, żc rozmiar liter ma znaczenie. Z tego identyfikatora będziemy korzystać w celu wywołania funkcji

Zaraz za identyfikatorem, w nawiasach, umieszczamy wymagane przez funkcję parametry. Jeśli potrzebujemy więcej niż jednego parametru, oddzielamy jc przecinkami. Kolejno podajemy typ zmiennej, następnie ję nazwę. Ważne jest, że parametry te będą dostępne tylko i wyłącznie dla tworzonej funkcji. Uważaj aby nie nadać parametrowi nazwy jakiejś zmiennej globalnej. Przeciwnie do BASCOM-a. tutaj nie tylko nie jest to wymagane, ale wręcz niewskazane.

Między nawiasami klamrowymi umieszczamy ciało funkcji, czyli po prostu opis jej działania. Możemy wykorzystać teraz wszelkie funkcje standardowe, wywołać inną własną funkcję, a nawet -funkcja może wywołać samą siebie... Tak czy inaczej ciało funkcji pisaliśmy już kilka razy, tak więc nie jest to już niczym nowym.


Parametry

Parametr/ w C przesyłane są poprzez wartość. Oznacza to, że funkcja r.ie ma dostępu do zmiennych r.a pozornie funkcji wywołującej. Można więc z przesłanych danych korzystać do woli. Jak do zwykłej zmiennej możesz wpisać tutaj na przykład wynik cząstkowy akiegcś obliczenia... Na pewno nie zmieni to wartości zmiennej w funkcji wywołującej.

Wywołanie własnej funkcji

Gdy mamy już utworzoną własną funkcję, potrzebujemy jeszcze możliwości jej wywołania. Okazuje się, że jest to bardzo intuicyjne. Nie ma różnicy pomiędzy sposobem wywoływania własnej funkcji a jednej z funkcji standartowej. z jakich korzystaliśmy do tej pory. Tak więc wywołanie naszej funkcji przebiegnie

\VyswietłI{ex(wartość);

Wartość w nawiasach może być różnego typu. Może być to zmienna, może być wartość stała, może być całe wyrażenie... Co bardzo ciekawe, można tutaj także wywołać inną funkcję. Załóżmy czysto teoretycznie, że chcemy wyświetlić wartość jakiejś „zmiennej" umieszczonej w pamięci programu. Jak pokazywałem wcześniej, w tym celu konieczne jest wykorzystanie mokra pgmread. Przykład takiego działania przedstawia poniższy pseudokod (działający przykład udostępniam na stronic internetowej):

prog_uintl6_c gjStala = Oxcdel;

U • •)

WyswietlHex(pgn read worć(figStala));

W ten sposób podaliśmy jako parametr naszej funkcji wynik działania ir.nej funkcji. Istnienie takiej możliwości sprawia, ze możemy oszczędzić na zmiennych tymczasowych. Inaczej konieczne byłoby utworzenie dodatkowej zmiennej, wpisanie do niej wyniku działania funkcji odczytu z pamięci


I

I


następująco:


programu i dopiero przesłanie tej zmiennej do wyświetlania.

Z drugiej strony, w bardzo złożonych przypac-kach, rozwiązanie ze zmienną tymczasow-ą może znacznie uprościć zapis. Pamiętaj wtedy, że pi/odstawiona przed chwilą możliwość jest tylko możliwością. C nie zmusza nikogo do pisania w taki, a nic inny sposób.

Deklaracja i definicja

Powinno pojawić się, już nawet wcześniej, pytanie: „No dobrze... ale czy funkcję można wywołać ot tak sobie: zawsze i w dowolnym miejscu?”. Odpowiedź jest bardziej niż oczywista: „Niestety, nie można”. Zanim funkcja zostanie wywołana, musi być zdeklarowana. Deklaracja funkcji to powiadomienie kompilatora o tym, że dana funkcja istnieje oraz n tym, jakie przyjmuje paremetry. Od strony „kuchennej” deklaracja to nic innego jak powtórzona nazwa funkcji, razem z jej typem oraz informacją o parametrach. Deklaracja jednak w odróżnieniu od definicji nie zawiera ciała funkcji. Zamiast tego, zaraz za nawiasem z parametrami, umieszczamy znak średnika. Jest to konieczne, oby kompilator wiedział o co chodzi i nic szukał początku ciała funkcji.

Uważaj teraz. Okazuje się, żc zdefiniowanie funkcji oznacza także jej zdeklarowanie. Sprawa jest prostsza, niż wynikałoby ze skomp ikowania poprzedniego zdania. Oznacza to tylko tyle, że jeśli definiujesz funkcję (przypominam - stworzysz pełny opis razem 2 opisem działania) przed miejscem jej wywołania, nic jest konieczne umieszczanie nigdzie je deklaracji. Dlatego też często funkcję main umieszcza się na końcu. Dzię ki temu unikamy wpisywania dodatkowych linijek kodu. Jednak nie zawsze umieszczanie definicji ponad miejscem wywołania jest wygodne. Czasami może okazać się nawet niemożliwe Deklarację w takim przypadku umieszcza się najczęściezaraz za lub zaraz przed zmiennymi globalnymi Ogólniej juz po dołączeniu wszystkich plików nagłówkowych, ale jeszcze przed definicją jakiejkolwiek frakcji.

Ogólnie ilustruje to poniższy obrazek (pseudokod):


Dołączenie nagłówków


V0id W/3wiatlHex(uintl5_t var);


// Start int mainfvoid) {


•r[5] -


; Deklaracja funkcji

Deklaracja zmiennych


MyswiBtlHexCg_Licznik);

jorC::)

return Oj


Wywołanie funkcji, która jest zdefiniowana później, ale wcześniej pojawiła si^jcf deklaracja


Definicja funkcji


// Funkcja flryiwietla w kodzie hekSsidecymalnym podany void Wyt»viatlllo*(ul.n:.lC t var)

g_UaneWyswi«tl*caa[DJ ■ pgm reod byto(4<j WzorCy£r[var»(3*t)]); c OanoWy3wletlac2a[l] - p<jra_r«ad_byte(lk KzorCyf    ]) J

ę"oanaWyswlet:ldCZd[Z] - p<jro_reaa_bytć(łr; WtC>rCytr[(var»(lM) J40xf J) ; <?_DonoWyowi«sl4cxa[3] - pgn_x*»d_>tiyt*(ły_KltoiCyfttv4t40)if]) i


Radosław Koppcl


48 Lipiec2005 Elektronika dla Wszystkich


Wyszukiwarka

Podobne podstrony:
Image36 (8) Programowanie ła funkcja pomocnicza Icd LineStart, która przyjmuje numer linii, a zwraca
Funkcje podstawy programowej Podstawową funkcją jest funkcja regulacyjna. Oznacza to, że stanowi ona
11114 Image35 (5) Programowanie ABC... C Warunki Warunki są to pewne specyficzne wyrażenia, które mo
Image34 (5) ■ Programowanie Rys. 22 Badanie liczby cykli obsługi przerwania że dokładnie co taki cza
ABC84 Zima Zimą dzień jest bardzo krótki. Szybko zapada zmrok, a zaraz potem robi się noc. Ma
cz4 Programowan ie Jak to robi GCC Co to są tak naprawdę zmienne lokalne? Kiedy zdefiniujesz jakąś
BLOOD+2 ON TEZ JEST CHIROPTEREM PONIEWAŻ TAK NAPRAWDĘ POTWORY NIE ISTNIEJĄ ...WIECMysusz O NIM JAK
SZKODLIWOŚĆ PALENIA TYTONIU Nie od dziś wiadomo, że palenie tytoniu jest szkodliwe, ale tak naprawdę
odbicie od białej kartki jest bardzo jasne dla ludzkiego oka. Czas po którym obwiednia jest mnożona
Nie bierze się pod uwagę tego jednak, że narząd ruchu jest jeszcze niewykształcony, tak jak i cały o
scandjvutmpc401 182 Gry i ćwiczenia ruchowe. nie, co się u dzieci zdarza często w czasie śpiewu, je

więcej podobnych podstron