C je preceduralni programski jezik osmišljen 1972. u AT&T Bell Labs. Korišten je za programiranje operativnih sustava, kompilatora, videoigara, računalnih mreža, ugrađenih sustava, baza podataka, upravljačkih programa, programskih jezika kao što su Python i Lua, firmwarea. Tijekom razvoja C je postao popularan zbog efikasnosti, prenosivosti, fleksibilnosti i utjecao je na dizajn modernih programskih jezika. Za razliku od drugih programskih jezika, C omogućava komuciranje i upravljanje hardverom uz visoke performanse.
Povijest razvoja
Autor ovog programskog jezika je Dennis Ritchie, no značajan doprinos nastanku C-a dali su Ken Thompson kao autor programskog jezika B i Martin Richards, autor programskog jezika BCPL. Ritchie je stvorio ovaj programski jezik za rješavanje praktičnih problema kodiranja sistemskih programa i jezgre operacijskog sustava UNIX, koji je praktički u cijelosti napisan u C-u.
desno|mini|Dennis Ritchie i Ken Thompson
Programski jezik C dosta se mijenjao tijekom godina te je u više navrata neformalno i formalno standardiziran. Prva važnija inačica poznata je pod nazivom "K&R C", što je engl. kratica prezimena dvaju autora najpoznatijeg C priručnika "The C Programming Language", a to su Brian Kernighan i Dennis Ritchie. Prvo izdanje te vrlo sažeto i precizno pisane knjige koje datira iz 1978. godine ujedno je de facto standardiziralo jezik u 70-ima. Drugo izdanje iz 1988. godine opisuje "ANSI C", standard kojeg je 1983. godine definirao američki nacionalni institut za standardizaciju, a koji je i danas podržan. Godine 1999. je donesen ISO/IEC 9899:1999 ili ga "C99". Krajem 2011. usvojen je ISO/IEC 9899:2011, poznat kao "C11", 2018. je donesen (2017. je počeo razvoj) ISO/IEC 9899:2018 ili ga "C17".
Kao jedan od najvažnijih jezika u povijesti komercijalne računalne industrije, C je do danas ostao jedini programski jezik prilagođen za sve računalne platforme, od malih sustava pa do mrežnih superračunala. Programi napisani u njemu vrlo su bliski načinu rada hardvera te u načelu zahtijevaju od programera dobro razumijevanje rada procesora, memorije, ulazno-izlaznih sklopova itd. No, rad s registrima procesora i adresiranje memorije apstrahirani su pomoću koncepta varijabli i pokazivača što uz eksplicitne kontrolne strukture i funkcije znatno olakšava programiranje u odnosu na izravno programiranje u strojnim jezicima. mini|desno|250px|Prvo izdanje knjige Programski jezik C, autora Kernighana i Ritchieja
Proširivanje na objektno orijentirano programiranje
Tijekom 1980-ih, Bjarne Stroustrup zajedno s drugim istraživačima u Bell Labs proširuje C dodavajući sposobnosti objektno orijentiranog programiranja, a naziv ovog novog programskog jezika je C++. Nažalost, takva kompatibilnost također podrazumijeva da su problemi koje programiranje u C-u nosi sa sobom naslijeđeni u C++-u. Efikasno i sigurno programiranje u C-u vrlo je zahtjevna vještina koja traži višegodišnje iskustvo pa je stoga C jezik koji se ne preporučuje početnicima, posebice ako im programiranje nije primarni posao.
Uporaba
C je jezik opće namjene, što znači da se u njemu može napraviti apsolutno sve: od rješavanja zadataka, do pisanja drivera, operacijskih susatava, tekst procesora ili igara. C, kao jezik, ni u čemu ne ograničava. Omogućuje i uključivanje naredbi pisanih asemblerski, zbog čega je zajedno s mogućnošću direktnog pristupa pojedinim bitovima, bajtovima ili cijelim blokovima memorije, pogodan za pisanje sistemskog softvera. Zbog tih karakteristika C je među popularnijim programskim jezicima i rabe ga mnogi programeri. Rezultat toga je postojanje velikog broja prevoditelja za C i alata te stalno dostupne pomoći na internetu. Programi pisani u C-u su prenosivi (mogu se prevoditi i izvršavati na različitim porodicama računala uz minimalne ili nikakve ispravke) i obično su vrlo brzi. Postoje mnogi prevoditelji za jezik C, a jedan od najkorištenijih je GNU C Compiler i Clang.
Problemi
Mnogobrojni problemi vezani prije svega za upravljanje memorijom koje programer mora sam eksplicitno kodirati razlog su da je danas većina novih korisničkih aplikacija napisana u nekom modernijem jeziku koji ima ugrađeno automatsko upravljanje memorijom (Sakupljanje smeća), ne dopušta izravan rad s memorijom pomoću pokazivača te ima podršku za upravljanje kodom odnosno njegovom okolinom za vrijeme njegova izvođenja. Danas se relativno rijetko ukazuje potreba za pisanjem novih korisničkih aplikacija izravno u C-u, pa čak i u vrlo malim sustavima kao što su primjerice mobilni telefoni. Glavno područje njegove uporabe su sistemski programi na strani poslužitelja (engl. servers), programi prevoditelji (engl. compilers) i jezgre operativnih sustava (engl. operating system kernels), gdje je potreba za najvećom mogućom brzinom izvođenja, efikasnom kontrolom resursa i izravnom kontrolom hardvera od primarne važnosti.
Standardi i skup znakova
K&R C K&R C je verzija C-a koja nije standardizirana i odnosi se na knjigu "The C Programming language" Dennis Ritchie-a i Brian Kernighana objavljenu 1978. Smatra se prvi originalni oblik C-a. K&R C je nazvan po autorima Kernighan & Ritchie.
ISO C / ANSI C / C89 Prva standardna verzija C-a je bila odobrena od American National Standards Institute(ANSI) 1989. i poslije od međunarodne organizacija za normizaciju(ISO) 1990. pod ISO Standard ISO/IEC 9899:1990.
C99 Standardna verzija C-a odobrena je od međunarodne organizacije za normizaciju(ISO) 1999. pod ISO Standard ISO/IEC 9899:1999. Dodaje nove značajke za upotrebiti: "Variable-Length Arrays" i "Flexible Array Members".
C11 Standardna verzija C-a je bila odobrena od međunarodne organizacije za normizaciju(ISO) 2011. pod ISO Standard ISO/IEC 9899:2011. Dodaje UTF-8 podršku i podršku za višenitnost.
C17
C23
C2Y C2Y verzija C-a je budući novi ISO Standard u kojem se planira nove značajke, reviziju ili uvođenja novih ključnih riječi.
Skup znakova Osnovni skup znakova u programskom jeziku C sastavljen je od sljedećih: Malo i veliko slova abecede: a–z A–Z Brojevi: 0–9 Posebni znakovi ! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~ Prije pojave standarda C11 u programskom jeziku C u standardu nije bilo moguće umetnuti posebne znakove koji nisu bili u ANCII. Ratifikacijom standard C11 sada je moguće umetnuti posebne znakove (UTF-8) u heksadecimalnom obliku \uXXXX ili \UXXXXXXXX.
Ključne riječi
Programski jezik C u standardu C89 ima samo 32 ključne riječi, ove riječi nije moguće primijeniti za variable ili za neke druge svrhe kao recimo imena funkcija, konstanti ili slično:
auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
Stadardom C99 dodaje se još 5 novih riječi:
_Bool _Complex
_Imaginary inline
restrict
Standardom C11 dodaje se još 7 novih riječi:
_Alignas _Alignof
_Atomic _Generic
_Noreturn _Static_assert
_Thread_local
Struktura programa pisanog u C-u
Najjednostavniji program je onaj koji zadani tekst ispisuje na ekran. Da bi se mogao ispravno napisati čak i tako jednostavan program, potrebno je poznavati strukturu programa odabranog programskog jezika.
Struktura programa odnosi se na način pisanja programa i ako se ona ne poštuje, program neće raditi, bez obzira na to što su uporabljene sve potrebne naredbe. Svaki program pisan u programskom jeziku C sastavljen je od niza funkcija. Glavna i jedina obavezna funkcija u programu je funkcija main( ). Program se može sastojati i od većeg broja funkcija.
Bitna razlika između C-a i ostalih programskih jezika je u tome što u C-u ne postoje ugrađene funkcije. One se nalaze u bibliotekama funkcija koje se isporučuju zajedno s prevoditeljem. Biblioteke funkcija nastale su standardizacijom C-a, pa je dovoljno na početku programa najaviti da će se upotrebljavati određena biblioteka i u cijelom programu dostupne su sve funkcije koje se u njoj nalaze. Tako se biblioteka u kojoj se nalaze funkcije za ulaz i izlaz podataka naziva stdio.h, matematičke funkcije nalaze se u biblioteci math.h, a funkcije za rad sa znakovnim varijablama u biblioteci string.h.
Na početku svakog C programa uobičajeno je pisati pretprocesorske naredbe kojima se pozivaju biblioteke funkcija koje se rabe u programu. Opći oblik te naredbe je: #naredba parametri. Najčešće upotrebljavana pretprocesorska naredba je: #include <ime datoteke> i obavezno se piše prije funkcije main( ). Prevođenjem programa na mjesto naredbe #include kopira se sadržaj navedene datoteke.
Isto tako, prije samog pisanja programa treba istaknuti da se programi napisani u C-u sastoje od niza međusobno povezanih funkcija čiji broj nije ograničen. U svakom programu je obavezna samo jedna funkcija - funkcija main( ) koja označava mjesto na kojem počinje izvršavanje programa. Početak i kraj funkcije označava se vitičastim zagradama. Nakon svake naredbe u C-u mora stajati znak ; koji (kao i u Pascalu) označava kraj jedne i početak druge naredbe.
Programski primjer Primjer: korisnik unosi 2 broja, a nakon unosa na zaslonu se ispisuje njihov zbroj: #include <stdio.h> // Dodaj osnovnu biblioteku.
int main(void) { // Glavna Funkcija za pokretanje programa. int a, b; scanf("Prvi broj %d",&a); // Pitaj korisnika za prvi broj. scanf("Drugi broj %d",&b); // Pitaj korisnika za drugi broj. printf("Njihov zbroj je = %d\n",a+b); // Isprintaj zbroj. return 0; // Izađi iz programa. }Primjer: Ispiši "Pozdrav, svijete!":#include <stdio.h> // Dodaj osnovnu biblioteku.
int main() { // Glavna funkcija za pokretanje programa. printf("Pozdrav, svijete!\n"); // Isprintaj. return 0; // Izađi iz programa. }
Vrste podataka
Namjena svakog programa jest obrada podataka i prikaz rezultata te obrade (ispis dobivenih vrijednosti). Pri ispisu vrijednosti potrebno je definirati format ispisa. Njime se oblikuje način ispisa vrijednosti. Pojam formata usko je vezan za tipove podataka.
Podaci u C-u mogu biti:
cjelobrojni (int) realni (float) realni dvostruke točnosti (double) znakovni (char) tip podataka koji ne sadržava vrijednost (void)
Svaki od navedenih može biti s predznakom (signed) ili bez njega (unsigned). Opsegvrijednosti se može odrediti parametrima short i long, koji određuju krajnje vrijednosti svakog tipa. Razlika među njima je u broju bitova koje zauzimaju prilikom zapisa u memoriji:
Tip podataka VrstaPredznak Duljina (broj bajtova)https://msdn.microsoft.com/en-us/library/s3f49ktz.aspx Opseg 1 intshortsigned 2 -32768 do 32767unsigned20 do 65.535longsigned4–2.147.483.648 do 2.147.483.647unsigned40 do 4.294.967.295long longsigned8–9.223.372.036.854.775.808 do 9.223.372.036.854.775.807unsigned80 do 18.446.744.073.709.551.615 2 float 4 -3.4·10−38 do 3.4·1038 3 double 8 -1.7·10−308 do 1.7·10308 4 charlongsigned 1 -128 do 127unsigned10 do 2555bool1true (1) ili false (0) 6 void 0 bez vrijednosti
Za ispis vrijednosti upotrebljava se funkcija printf( ) koja je oblika:printf("lista formata", lista varijabli);
Najčešće korištene oznake formata za ispis:
Format Značenje 1 %c oznaka formata za ispis jednog znaka 2 %d ispis cijelog broja 3 %f ispis realnog broja 4 %lf ispis realnog broja tipa double 5 %s ispis niza znakova 6 %e ispis realnog broja u E-notaciji
Izgled ispisa na zaslonu uređuje se unutar dvostrukih navodnika, a u listi varijabli dolazi samo popis varijabli. To prilično olakšava rad s kombiniranim ispisom, jer nema mnogo kompliciranja i kombiniranja naovodnika i zareza kao u ostalim programskim jezicima. Unutar navodnika kreira se izgled ispisa na ekran, a izvan njih redom se navode sve varijable čije se vrijednosti trebaju ispisati. Redoslijed oznaka formata mora odgovarati redoslijedu imena varijabli. Pogrešno zadan format u odnosu na deklaraciju varijable rezultirat će porešnim ispisom.
Aritmetički operatori