36. Struktura programa (u programskom jeziku C)
U ovoj lekciji će biti prikazan veoma jednostavan (i kompletno beskorisan) program napisan u programskom jeziku C - u cilju ilustrovanja osnovnih pravila za kreiranje programa.
Prvo ćemo da definišemo šta naš program treba da radi: želimo da se na ekranu prikaže kratak tekst. Neka tekst koji želimo da se prikaže bude:
To sam ja, tvoj prvi program.
Šta bi taj program sve trebalo da uradi:
1. da počne sa radom
2. da ispiše tekst na ekran
3. da završi sa radom
Kako bi trebalo da izgleda ovaj program:
#include <stdio.h> int main(void) { puts("To sam ja, tvoj prvi program."); return 0; }
/* ovo je prost program
odnosno, primer koji smo radili na casu */
***
Prvo treba obratiti pažnju na karakter # (hash) na početku prve linije. To označava da je sadržaj te linije pretprocesorska direktiva. Zasad nećemo da previše ulazimo u detalje u vezi pretprocesora; bitno je da znate da je to zaseban deo kompajlera, čiji je zadatak da unapred pročita tekst programa i da uradu neke izimene u njemu. Prefiks "pre" sugeriše da se te operacije obavljaju pre kompajliranja.
Izmene koje pretprocesor treba da izvede zavise od navedene direktive. U našem programu, koristimo direktivu include. Kada pretprocesor naiđe na tu direktivu, on zamenjuje direktivu sa sadržajem fajla čije je ime navedeno u direktivi (u našem slučaju, to je fajl stdio.h). Napomena - izmene koje uvodi pretprocesor nikada neće promeniti sadržaj vašeg izvornog fajla ni na koji način. Bilo koje izmene koje se prave su na privremenoj kopiji vašeg programa, koja nestaje onog momenta kada kompajler završi sa radom.
Zašto želimo da pretprocesor unese sadržaj potpuno nepoznatog fajla stdio.h? Pisanje programa je slično konstruisanju neke zgrade sa već formiranim blokovima. U našem programu, mi ćemo da iskoristimo jedan takav blok na taj način da on izvede ispis na ekran. Blok koji koristimo se zove puts (možete ga naći unutar koda), ali zasad kompajler ne zna ništa o tome. Konkretno, konpajler nema pojma da je puts ispravno napisano a da pust nije. Kompajler treba na neki način da obavestimo o tome. Ove preliminarne informacije koje su kompajleru itekako potrebne nalaze se u fajlovim ačija imena obično završavaju sa ".h"(header). Ovi fajlovi se obično nazivaju u originalnom engleskom nazivu header files.
U standardu programskog jezika C je definisan fajl stdio.h koji u sebi sadrži skup preliminarnih informacija o već formiranim blokovima koji mogu da se koriste za ispis teksta na ekran ili za upis slova sa tastature. Tako da, kada naš program treba da ispiše nešto, očigledno je da ćemo koristiti blok puts, koji će to i da uradi. Mi ne želimo da kompajler bude iznenađen, pa ga stoga moramo upozoriti o tome. Oni koji su pisali kompajlere postavili su potrebne informacije u stdio.h fajl. Mi samo želimo da taj fajl koristimo, i to je tačno ono što se očekuje od include direktive.
***
Jedna od najčešće korišćenih vrsta blokova koji se koriste za kreiranje C programa su funkcije. Zamislite funkciju kao crnu kutiju, u koju možete (a ne morate) nešto da ubacite i da iz nje dobijete nešto novo kao iz magičnog šešira. Ono što stavljamo u kutiju su argumenti funkcije (ili parametri funkcije). Ono što dobijemo iz kutije su rezultati funkcije. Uz to, funkcija može da uradi još ponešto sa strane.
Sada ćemo da se vratimo na naš program. U standardu programskog jezika C se pretpostavlja da, između mnoštva različitih blokova koji se mogu staviti u program, jedan specifičan blok mora da uvek bude prisutan, jer inače program neće biti ispravan. Taj blok je uvek funkcija koja ima isto ime: main.
Svaka funkcija u C-u počinje sa sledećim informacijama:
- šta funkcija vraća kao rezultat?
- šta je ime funkcije?
- koliko parametara ta funkcija ima i koja su njihova imena?
U našem programu vidimo sledeće:
- rezultat funkcije je ceo broj (to se vidi iz reči int, što je oznaka za integer)
- ime funkcije je main (to već znamo zašto)
- ova funkcija ne zahteva nikakve parametre (što čitamo oz reči void)
Skup ovakvih informacija se naziva prototip, i to je kao oznaka koja se postavlja na funkciju, i koja objavljuje na koji način možemo da koristimo funkciju u programu. Prototip ništa ne kaže o tome za šta je funkcija namenjena. To je napisano unutar funkcije. Unutrašnjost funkcije se naziva telo funkcije (engl. function body). Telo funkcije počinje tamo gde se nalazi prva otvorena vitičasta zagrada { a završava se tamo gde se nalazi odgovarajuće zatvorena vitičasta zagrada }. Možda će zvučati čudno, ali telo funkcije može da bude prazno - to samo znači da u tom slučaju funkcija ne radi ništa.
Unutar tela funkcije main bi trebalo da napišemo šta bi naša funkcija (a time i naš program) trebalo da radi. Možete videti da je ono što se nalazi u našoj funkciji : to je oznaka koja pokazuje na blok koji se zove puts. Ovo je nešto što zovemo poziv funkcije (engl. function invocation).
Par detalja na koje treba obratiti pažnju:
Na kraju svakog reda se nalazi tačka-zarez (;). Svaka instrukcija (preciznije, svaki iskaz koji nešto radi) u C-u mora da se završi sa tačka-zarezom - bez toga bi program bio neispravan. Iskaz koji imamo u našoj funkciji kaže sledeće: upotrebi funkciju koja se zove puts da prikaže tekst na ekranu. Kako mi znamo da će funkcija puts to da uradi za nas? Odgovor je da to znamo iz standarda za programski jezik C, ali i iz toga što je ime funkcije skraćenicca od "PUT String". Tekst koji nameravamo da prikažemo na ekranu predaje se funkciji kao njen parametar.
Zapamtite da ime funkcije koja se poziva mora iza sebe da ima par zagrada (), čak i kada dotična funkcija ne očekuje nikakve parametre od nas.
Drugo, parametar funkcije puts je tekst (string). Zasad treba da zapamtite da su stringovi reči ili rečenice koji počinju u završavaju se dvostrukim navodnicima: "ovo je string", "Pera", ...
Na koji način funkconiše pozivanje funkcije? To možemo da ilustrujemo na sledeći način: izvršavanje funkcije main se zaustavi (kao da funkcija main utone u san) i tokom tog vremena će funkcija puts da odštampa zadati tekst na ekranu. Onog momenta kada se završi sa ispisom teksta, vrši se povratak (return) u funkciju main, i funkcija main se budi i nastavlja sa svojim radom.
Sledeća linija koju treba objasniti je:
return 0;
Ovo je još jedan iskaz (engl. statement) u programskom jeziku C. Naziv mu je return i znači baš to: Kada se koristi unutar funkcije, dovodi do završetka izvršavanja funkcije. Ako se bilo gde i telu funkcije izvede return, tada funkcija momentalno prekida izvršenje. Nula koja se nalazi iza reči return je rezultat naše funkcije main. Ovo je veoma važno - to je način na koji naš program kaže operativnom sistemu sledeću poruku: Uradio sam šta je trebalo, ništa me nije prekinulo i sve je OK. Ako biste napisali liniju:
return 1;
to bi značilo da je nešto nije kako treba i da program nije mogao da se završi kako treba, pa će onda operativni sistem moći da iskoristi tu informaciju i adekvatno da reaguje.
I to je sve!
Još jedan pogled na naš program i da rezimiramo šta se dešava korak po korak:
- ubacili smo funkciju main - ona će da se izvršava kada pokrenemo program
- unutar main funkcije smo pozvali funkciju puts - koja će ispisati tekst na ekran
- program se završava neposredno nakon ispisa, sa oznakom da je sve prošlo OK
Na kraju se još nalazi komentar u koji smo upisali šta smo radili u ovom programu. Komentar je nešto što započnemo sa " /* " i tu možemo da pišemo bilo šta - obično ono šta smo radili da ne bi zaboravili - i na kraju se završava sa " */ " . Sve što se nalazi između ta dva znaka je tu radi nas, da znamo šta smo radili, ali kompajleru ne znači baš ništa! Sve što je između početka i kraja komentara, kompajler prilikom prevođenja u mašinski jezik računa kao jedan znak razmaka (space) !

....