UVOD U PROGRAMSKI JEZIK C
Programski jezik C, razvijen 1972. godine od strane Denisa Ričija u laboratorijama kompanije Bell Labs, predstavlja jedan od najvažnijih i najuticajnijih programskih jezika u istoriji informatike. Osmišljen je kao alat za implementaciju operativnog sistema UNIX, ali se vrlo brzo proširio na druge oblasti zahvaljujući svojoj efikasnosti i svestranosti.
Glavne karakteristike C-a uključuju:
Glavne karakteristike C-a uključuju:
- Pristup niskom nivou: Omogućava rad direktno sa hardverom i memorijom, što ga čini pogodnim za sistemsko programiranje.
- Prenosivost: C je dizajniran tako da omogućava pisanje koda koji se može lako preneti na različite arhitekture.
- Jednostavnost i fleksibilnost: Iako zahteva pažljivo upravljanje resursima, C pruža dovoljno fleksibilnosti za rešavanje različitih problema.
C je opšti programski jezik koji se koristi za širok spektar aplikacija iz operativnih sistema kao što su Windows i iOS za softver koji se koristi za kreiranje 3D filmova.
C programiranje je vrlo efikasano. To je glavni razlog zbog koga je veoma popularan uprkos tome što ima više od 40 godina. Standardni C programi su prenosivi. Izvorni kod napisan u jednom sistemu radi u drugom operativnom sistemu bez ikakve promjene. Kao što je rečeno, dobar je jezik za početak učenja programa.
C programiranje je vrlo efikasano. To je glavni razlog zbog koga je veoma popularan uprkos tome što ima više od 40 godina. Standardni C programi su prenosivi. Izvorni kod napisan u jednom sistemu radi u drugom operativnom sistemu bez ikakve promjene. Kao što je rečeno, dobar je jezik za početak učenja programa.
Zašto koristiti C?
C se inicijalno koristio za rad na razvoju sistema, posebno za programe koji čine operativni sistem. C je usvojen kao jezik za razvoj sistema jer proizvodi kod koji pokreće gotovo brže kao kod napisan u asembleru. Neki primjeri korištenja C mogu biti -
- Operativni sistemi
- Programski prevodioci
- Asembleri
- Uređivači teksta
- Mrežni drajveri
- Savremeni programi
- Baze podataka
Gde se programski jezik C koristi danas
C jezik je i dalje široko korišćen u mnogim područjima softverskog razvoja zbog svoje efikasnosti, niskog nivoa apstrakcije i bliskosti hardveru. Evo nekoliko ključnih područja gde se C danas koristi:
1. Operativni sistemi:
- Mnogi operativni sistemi, uključujući Unix, Linux i delovi Windowsa, napisani su u C. Jezgro (kernel) Linuxa je, na primer, većinom napisano u C.
2. Embedded sistemi:
- C je dominantan u razvoju firmware-a i softvera za ugrađene sisteme (embedded systems), kao što su mikrokontroleri, senzori i razna industrijska i potrošačka elektronika.
3. Sistemski softver:
- Kompajleri, interpreteri, asembleri, pa čak i neki delovi runtime okruženja drugih programskih jezika često su implementirani u C zbog njegove efikasnosti i kontrole nad hardverom.
4. Razvoj baza podataka:
- Mnoge baze podataka, kao što su MySQL i PostgreSQL, napisane su u C, što im omogućava visok stepen performansi i optimizacije.
5. Računarske igre i grafika:
- C se koristi u razvoju igara i grafičkih motora (engines), gde je brzina ključna. Mnogi popularni grafički motori kao što su Unity (koristi C++) i Unreal Engine (koristi C++) imaju komponente napisane u C.
6. Mrežni protokoli i sigurnost:
- Mnogi mrežni protokoli i sigurnosni alati implementirani su u C zbog potrebe za visokim performansama i direktnim pristupom memoriji i mrežnim uređajima.
7. Visoko-performantni računari (HPC):
- C se koristi u naučnim istraživanjima i numeričkom računarstvu, gde su potrebne brze i efikasne implementacije algoritama.
8. Razvoj vozača (drivers):
- Drajveri za hardver (hardware drivers) često su napisani u C jer zahtevaju direktan pristup hardverskim resursima i efikasno upravljanje memorijom.
9. Portabilnost:
- Programi napisani u C mogu se relativno lako portovati između različitih platformi, što je korisno za razvoj softvera koji treba da radi na različitim vrstama hardvera.
Iako su noviji jezici kao što su Python, Java i C++ preuzeli mnoge oblasti u softverskom razvoju, C ostaje ključan za situacije gde su performanse, kontrola nad hardverom i efikasnost od suštinskog značaja.
1. Operativni sistemi:
- Mnogi operativni sistemi, uključujući Unix, Linux i delovi Windowsa, napisani su u C. Jezgro (kernel) Linuxa je, na primer, većinom napisano u C.
2. Embedded sistemi:
- C je dominantan u razvoju firmware-a i softvera za ugrađene sisteme (embedded systems), kao što su mikrokontroleri, senzori i razna industrijska i potrošačka elektronika.
3. Sistemski softver:
- Kompajleri, interpreteri, asembleri, pa čak i neki delovi runtime okruženja drugih programskih jezika često su implementirani u C zbog njegove efikasnosti i kontrole nad hardverom.
4. Razvoj baza podataka:
- Mnoge baze podataka, kao što su MySQL i PostgreSQL, napisane su u C, što im omogućava visok stepen performansi i optimizacije.
5. Računarske igre i grafika:
- C se koristi u razvoju igara i grafičkih motora (engines), gde je brzina ključna. Mnogi popularni grafički motori kao što su Unity (koristi C++) i Unreal Engine (koristi C++) imaju komponente napisane u C.
6. Mrežni protokoli i sigurnost:
- Mnogi mrežni protokoli i sigurnosni alati implementirani su u C zbog potrebe za visokim performansama i direktnim pristupom memoriji i mrežnim uređajima.
7. Visoko-performantni računari (HPC):
- C se koristi u naučnim istraživanjima i numeričkom računarstvu, gde su potrebne brze i efikasne implementacije algoritama.
8. Razvoj vozača (drivers):
- Drajveri za hardver (hardware drivers) često su napisani u C jer zahtevaju direktan pristup hardverskim resursima i efikasno upravljanje memorijom.
9. Portabilnost:
- Programi napisani u C mogu se relativno lako portovati između različitih platformi, što je korisno za razvoj softvera koji treba da radi na različitim vrstama hardvera.
Iako su noviji jezici kao što su Python, Java i C++ preuzeli mnoge oblasti u softverskom razvoju, C ostaje ključan za situacije gde su performanse, kontrola nad hardverom i efikasnost od suštinskog značaja.
Šta je potrebno da bi se kreirao jedan C ili C++ program?
Pored operativnog sistema, da bi se mogla razvijati jedan C, kao i C++ aplikacija potrebno je:
Razvojni alat za programiranje(opciono), kao npr: dec c++, CodeBlock, VS Code i sl.
Za potrebe ovog tutorijala koristiće se CodeBlock, koji se može preuzeti sa websajta: https://www.codeblocks.org/downloads/
- Koristiti neki tekst editor za pisanje izvornog koda aplikacije. To može biti notepad, notepad++ ili neki drugi, ili editor koji je u sastavu razvojnog alata, ako se isti koristi.
- Instalirati odgovarajući kompajler. Najčešće je to GNU C/C++ kompajler. Na windows OS je potrebno instalirati MinGW (www.mingw.org), koji u sebi ima pomenuti kompajler, dok na Linux OS pomenuti kompajler može da se instalira komandom: $ g++ -v.
- Kompajler izvornu verziju koda, napisanu u nekom tekst editoru ili editoru nekog razvojnog okruženja (CodeBlock-a npr) pretvara u izvršnu verziju koda.
Izvršna verzija se može napraviti i bez instaliranja kompajlera na lokalni kompjuter, tako što bi se koristila online verzija kompajlera: https://www.onlinegdb.com/online_c++_compiler.
Razvojni alat za programiranje(opciono), kao npr: dec c++, CodeBlock, VS Code i sl.
Za potrebe ovog tutorijala koristiće se CodeBlock, koji se može preuzeti sa websajta: https://www.codeblocks.org/downloads/
C vs. C++. Prednosti i mane
C programski jezik
Prednosti
1. Jednostavnost:
- C je jezik niskog nivoa koji je lakši za učenje i korišćenje zbog svoje jednostavne sintakse i manjeg broja funkcionalnosti.
2. Efikasnost:
- Programi napisani u C imaju visok stepen performansi i efikasnosti jer omogućavaju direktan pristup memoriji i hardveru.
3. Portabilnost:
- C je veoma portabilan jezik i može se koristiti na gotovo svim platformama sa minimalnim promenama u kodu.
4. Široka upotreba:
- C je osnova mnogih drugih programskih jezika, što olakšava učenje tih jezika. Mnogi sistemi i aplikacije su napisani u C, uključujući operativne sisteme i embedded sisteme.
Mane
1. Ograničena podrška za objektno orijentisano programiranje:
- C nema nativnu podršku za objektno orijentisano programiranje (OOP), što može otežati organizaciju i održavanje većih projekata.
2. Manjak apstrakcije:
- Programeri u C moraju da upravljaju memorijom ručno, što povećava rizik od grešaka kao što su curenja memorije i buffer overflow.
3. Nedostatak standardne biblioteke za moderne funkcionalnosti:
- C ima relativno ograničenu standardnu biblioteku u poređenju sa savremenijim jezicima, što može zahtevati pisanje više koda za implementaciju određenih funkcionalnosti.
C++ programski jezik
Prednosti
1. Podrška za objektno orijentisano programiranje (OOP):
- C++ dodaje podršku za klase, nasleđivanje, polimorfizam i enkapsulaciju, što omogućava bolju organizaciju i modularnost koda.
2. Standardna biblioteka (STL):
- C++ dolazi sa bogatom standardnom bibliotekom koja uključuje kontejnere, algoritme i funkcionalnosti za rad sa stringovima, što značajno ubrzava razvoj softvera.
3. Podrška za više paradigmi:
- Pored OOP, C++ podržava proceduralno, funkcionalno i generičko programiranje, pružajući veću fleksibilnost u razvoju softvera.
4. RAII (Resource Acquisition Is Initialization):
- C++ koristi RAII idiom za upravljanje resursima, što olakšava pravilno upravljanje memorijom i drugim resursima.
Mane
1. Kompleksnost:
- C++ je složeniji jezik u poređenju sa C zbog dodatnih funkcionalnosti i mogućnosti, što može otežati učenje i upotrebu.
2. Veći kompajlacioni zahtevi:
- Programi napisani u C++ često zahtevaju više vremena za kompilaciju zbog složenih funkcionalnosti i bogate standardne biblioteke.
3. Potencijal za složenije greške:
- S obzirom na to da C++ pruža mnoge moćne alate, neadekvatno korišćenje tih alata može dovesti do složenih grešaka koje su teže za otkrivanje i ispravljanje.
Zaključak
- C je idealan za sisteme i aplikacije koje zahtevaju direktan pristup hardveru i maksimalnu efikasnost, kao što su operativni sistemi, embedded sistemi i vozači hardvera.
- C++ je pogodan za složenije aplikacije koje zahtevaju bolju organizaciju koda i fleksibilnost, kao što su grafičke aplikacije, razvoj igara, softver za finansijske sisteme i druge aplikacije koje mogu iskoristiti objektno orijentisano programiranje i bogatu standardnu biblioteku.
Izbor između C i C++ zavisi od specifičnih zahteva projekta i preferencija programera.
Prednosti
1. Jednostavnost:
- C je jezik niskog nivoa koji je lakši za učenje i korišćenje zbog svoje jednostavne sintakse i manjeg broja funkcionalnosti.
2. Efikasnost:
- Programi napisani u C imaju visok stepen performansi i efikasnosti jer omogućavaju direktan pristup memoriji i hardveru.
3. Portabilnost:
- C je veoma portabilan jezik i može se koristiti na gotovo svim platformama sa minimalnim promenama u kodu.
4. Široka upotreba:
- C je osnova mnogih drugih programskih jezika, što olakšava učenje tih jezika. Mnogi sistemi i aplikacije su napisani u C, uključujući operativne sisteme i embedded sisteme.
Mane
1. Ograničena podrška za objektno orijentisano programiranje:
- C nema nativnu podršku za objektno orijentisano programiranje (OOP), što može otežati organizaciju i održavanje većih projekata.
2. Manjak apstrakcije:
- Programeri u C moraju da upravljaju memorijom ručno, što povećava rizik od grešaka kao što su curenja memorije i buffer overflow.
3. Nedostatak standardne biblioteke za moderne funkcionalnosti:
- C ima relativno ograničenu standardnu biblioteku u poređenju sa savremenijim jezicima, što može zahtevati pisanje više koda za implementaciju određenih funkcionalnosti.
C++ programski jezik
Prednosti
1. Podrška za objektno orijentisano programiranje (OOP):
- C++ dodaje podršku za klase, nasleđivanje, polimorfizam i enkapsulaciju, što omogućava bolju organizaciju i modularnost koda.
2. Standardna biblioteka (STL):
- C++ dolazi sa bogatom standardnom bibliotekom koja uključuje kontejnere, algoritme i funkcionalnosti za rad sa stringovima, što značajno ubrzava razvoj softvera.
3. Podrška za više paradigmi:
- Pored OOP, C++ podržava proceduralno, funkcionalno i generičko programiranje, pružajući veću fleksibilnost u razvoju softvera.
4. RAII (Resource Acquisition Is Initialization):
- C++ koristi RAII idiom za upravljanje resursima, što olakšava pravilno upravljanje memorijom i drugim resursima.
Mane
1. Kompleksnost:
- C++ je složeniji jezik u poređenju sa C zbog dodatnih funkcionalnosti i mogućnosti, što može otežati učenje i upotrebu.
2. Veći kompajlacioni zahtevi:
- Programi napisani u C++ često zahtevaju više vremena za kompilaciju zbog složenih funkcionalnosti i bogate standardne biblioteke.
3. Potencijal za složenije greške:
- S obzirom na to da C++ pruža mnoge moćne alate, neadekvatno korišćenje tih alata može dovesti do složenih grešaka koje su teže za otkrivanje i ispravljanje.
Zaključak
- C je idealan za sisteme i aplikacije koje zahtevaju direktan pristup hardveru i maksimalnu efikasnost, kao što su operativni sistemi, embedded sistemi i vozači hardvera.
- C++ je pogodan za složenije aplikacije koje zahtevaju bolju organizaciju koda i fleksibilnost, kao što su grafičke aplikacije, razvoj igara, softver za finansijske sisteme i druge aplikacije koje mogu iskoristiti objektno orijentisano programiranje i bogatu standardnu biblioteku.
Izbor između C i C++ zavisi od specifičnih zahteva projekta i preferencija programera.
Za konkretne primere i sintaksu programskog jezika C, pogledajte naredne strane tutorijala, gde su detaljno objašnjeni osnovni elementi jezika.
Verzije programskog jezika C
Programski jezik C prošao je kroz nekoliko ključnih verzija tokom svoje istorije, pri čemu je svaka verzija donela značajna poboljšanja, nove mogućnosti i prilagođavanja modernim potrebama programiranja.
C89/C90 (ANSI C)
C89/C90 (ANSI C)
- Prva standardizovana verzija jezika C.
- Usvojen od strane ANSI (American National Standards Institute) 1989. godine i kasnije od strane ISO (International Organization for Standardization) 1990.
- Fokus na stabilnosti i portabilnosti koda.
- Sadrži 32 rezervisane reči koje definišu ključne funkcionalnosti jezika.
- Objavljen 1999. godine, ovaj standard donosi mnoge novine:
- Podrška za inline funkcije.
- Deklaracije promenljivih u bilo kojem delu bloka koda.
- Novi tipovi podataka, poput long long int i complex.
- For petlja s deklaracijom u telu.
- Broj rezervisanih reči povećan je na 37, uključujući reči poput restrict i _Bool.
- Objavljen 2011. godine, fokusirao se na sigurnost i fleksibilnost:
- Uvođenje atomskih operacija i multithreading podrške.
- Novi ključni tipovi kao _Generic.
- Poboljšanja u alokaciji memorije, uključujući funkciju aligned_alloc.
- Dodato je još nekoliko rezervisanih reči, poput _Atomic i _Thread_local, čime je ukupan broj povećan na 40.
- Ovaj standard je objavljen 2017. godine kao manje ažuriranje C11.
- Fokusiran je na ispravke grešaka i manja poboljšanja performansi.
- Nema novih rezervisanih reči.
- Najnovija verzija jezika, objavljena 2023. godine.
- Fokusira se na modernizaciju jezika i proširenje mogućnosti:
- Dodavanje novih sintaksnih poboljšanja.
- Uklanjanje nekih zastarelih funkcija.
- Uvođenje novih ključnih reči i dodatnih bibliotečkih funkcija.
Rezervisane reči u C jeziku
Rezervisane reči u C jeziku su unapred definisane reči sa specifičnim značenjima koje ne mogu biti korišćene kao identifikatori u vašem programu.
U sledećoj tabeli je prikazana evolucija rezervisanih reči kroz različite verzije C jezika:
Verzija | Broj rezervisanih reči | Primeri rezervisanih reči |
---|---|---|
C89/C90 | 32 | auto, break, case, char |
C99 | 37 | inline, restrict, _Bool |
C11 | 40 | _Atomic, _Static_assert |
C17 | 40 | (isto kao C11) |
C23 | 43+ (procena) | Nove dodatke u razmatranju |
Kako osigurati ažurnost?
Za programere koji žele da ostanu u toku s razvojem jezika C, preporučuje se:
- Praćenje zvaničnih standarda objavljenih od strane ISO.
- Redovno konsultovanje sa dokumentacijom za kompajler koji koriste (npr. GCC, Clang, MSVC).
- Učenje novih mogućnosti i ključnih reči putem kurseva i specijalizovanih vodiča.
Sledeće
Elementi jezika C >| |