iesz ju┐ bardzo du┐o na temat programowania. Za pomoc▒ tych prostych funkcji i instrukcji, kt≤re pozna│e╢ w poprzednich lekcjach, mo┐esz ju┐ tworzyµ bardzo skomplikowane programy. Nieraz bΩd▒ mia│y one bardzo d│ugi kod, w kt≤rym │atwo sie bΩdzie pogubiµ (a tym bardziej, je╢li nie zastosujesz komentarzy do opisywania r≤┐nych czΩ╢ci kodu, odpowiedzialnych za wykonanie okre╢lonej czynno╢ci). Zwykle do wykonania jakiej╢ bardziej z│o┐onej czynno╢ci s│u┐y kilka lub kilkana╢cie instrukcji. Je┐eli tak▒ czynno╢µ bΩdzie trzeba wykonaµ kilka razy w r≤┐nych miejscach programu, nale┐y zdefiniowaµ funkcjΩ, kt≤ra bΩdzie grupowa│a i okre╢la│a wszystkie te instrukcje.
G│≤wn▒ funkcj▒ programu bΩdzie jednak zawsze funkcja main(). To od niej zacznie siΩ wykonywanie programu. Mo┐e siΩ ona jednak odwo│ywaµ do innych funkcji, kt≤re sam zdefiniujesz. Definicja takiej funkcji, czyli przypisanie do jakiej╢ nazwy fragmentu kodu, musi odbyµ siΩ poza cia│em funkcji g│≤wnej main. Struktura programu wygl▒da wiΩc nastΩpuj▒co:
definicje plik≤w nag│≤wkowych (dyrektywa #include) definicje funkcji napisanych przez programistΩ i ich kod funkcja g│≤wna main() i jej kod
Funkcja zdefiniowana przez programistΩ nie r≤┐ni siΩ du┐o od funkcji g│≤wnej. Programista mo┐e jej nadaµ dowoln▒ (no, prawie dowoln▒) nazwΩ. Deklaracja takiej funkcji odbywa siΩ na zasadach analogicznych jak przy main(). Np.:
int mojafunkcja(int parametr) { deklaracja zmiennych tylko w obrebie funkcji; instrukcje; instrukcje; return costam_typu_int; }
Pora na przyk│ad:
#include <stdio.h> #include <conio.h> int moja_funkcja(int a, int b, int c) { int suma; suma=a*a+b*b+c*c; return suma; } main (void) { int a; a=moja_funkcja(1,2,3); printf("%d",a); } getch(); return 0 ; }
Zdefiniowalismy sobie w│asn▒ funkcjΩ o nazwie moja_funkcja(). Pobiera ona do dzia│ania 3 parametry - trzy liczby ca│kowite, a nastΩpnie oblicza sumΩ ich kwadrat≤w. Wewn▒trz funkcji zadeklarowali╢my zmienn▒ suma. Jest to tak zwana zmienna lokalna, to znaczy taka, kt≤ra dzia│a tylko w obrΩbie danej funkcji. Gdyby╢my spr≤bowali operowaµ na zmiennej suma w ciele funkcji main(), kompilator zwr≤ci│by b│▒d, ┐e zmienna nie zosta│a zadeklarowana. Analogicznie sytuacja siΩ ma ze zmienn▒ a. W naszej funkcji zosta│a ona zadeklarowana jako parametr do wczytania. W ciele funkcji main znowu zadeklarowali╢my zmienn▒ a. SΩk w tym, ┐e to nie jest ju┐ ta sama zmienna. Na tym w│a╢nie polega istota zmiennych lokalnych- dzia│aj▒ tylko w obrΩbie "swoich" funkcji.
Opr≤cz zmiennych lokalnych mamy jeszcze zmienne globalne. Jak nazwa wskazuje, maj▒ one szersze znaczenie ni┐ zmienne lokalne. Zmienna taka dzia│a we wszystkich funkcjach jako ta sama zmienna (w powy┐szym przyk│adzie zmienna a jest czym╢ innym w funkcji main i czym╢ innym w funkcji moja_funkcja). Deklaruje siΩ j▒ na samym pocz▒tku programu, tu┐ po deklaracji plik≤w nag│≤wkowych dyrektyw▒ include. Spr≤bujmy zastosowaµ teraz w ostatnim przyk│adzie zmienn▒ globaln▒:
#include <stdio.h> #include <conio.h> int suma; int moja_funkcja(int a, int b, int c) { suma=a*a+b*b+c*c; return suma; } main (void) { moja_funkcja(1,2,3); printf("%d",suma); } getch(); return 0 ; }
Zmienn▒ globaln▒ w tym przyk│adzie jest suma. Jak widaµ, nie trzeba by│o deklarowaµ jej ani w funkcji main ani w moja_funkcja. W obu tych funkcjach zmienna ta oznacza│a tΩ sam▒ zmienn▒. Dlatego po przepisaniu na ni▒ pewnej warto╢ci w funkcji w funkcji moja_funkcja zmiana jest te┐ widoczna w funkcji main(). Zmienne lokalne i globalne r≤┐ni▒ siΩ w momencie przydzielania pamiΩci. Musisz sam zdecydowaµ, kt≤re zmienne maj▒ byc lokalne, a kt≤re globalne. Na razie bΩdzie to zapewne wyb≤r losowy, ale im wiΩcej napiszesz program≤w, tym │atwiej bΩdzie Ci o tym zdecydowaµ.
Podsumowuj▒c: