Presentation is loading. Please wait.

Presentation is loading. Please wait.

Uvod u programski jezik C

Similar presentations


Presentation on theme: "Uvod u programski jezik C"— Presentation transcript:

1 Uvod u programski jezik C

2 Uvodne činjenice C je programski jezik opšte namjene
Prvi uspješan pokušaj uvođenja strukturiranog programiranja Korišćen je za razvoj operativnog sistema UNIX Koristi se za pisanje modernih OS C je portabilan jezik (program mogu da rade na različitim računarima) C predstavlja osnovu za dalje proučavanje programskih jezika kao što su C++ i Java

3 Reference Knjiga: Kernigan and Ritchie – “C Programming Language”
Laslo Kraus: Programski jezik C sa rešenim zadacima, Akademska misao, Beograd, 2012. Razvojno okruženje: Code Blocks

4 Faze razvoja programa u C-u
Preprocessor obrađuje kod. Loader smješta program u memoriju. CPU uzima instrukciju, izvršava je, i moguće smješta nove vrijednosti na disk. Kompajler kreira objektni kod koji čuva na disku. Linker povezuje objektni kod sa bibliotekama. Loader Primary Memory Compiler Editor Preprocessor Linker . Disk CPU Faze razvoja C programa: Edit Preprocess Compile Link Load Execute

5 Format C programa C program sadrži jednu ili više funkcija, a tačno jedna od njih mora biti main Tijela svih funkcija moraju biti unutar { i }. int znači da main “vraća" cio broj Posljednja naredba u main-u je return 0, što je oznaka sistemu da je program uspješno završio rad Sve naredbe moraju završiti tačka-zarezom (;) Sintaksne greške – prijavljuje ih kompajler Logičke greške Program radi ali daje pogrešan izlaz Program neočekivano završava sa radom

6 Prvi program u C-u #include <stdio.h> Preprocesorska direktiva Kompjuter treba da učita sadržaj određene datoteke <stdio.h> dopušta standardne input/output operacije Specijalne grupe karaktera (escape sekvence) kod funkcije printf: \n – štampa novi red \r – neće se štampati ništa ispred ovog karaktera \t – štampa horizontalni tab \\ - štampa jedan backslash \“ – štampa navodnike \a – alert (sistemsko zvonce)

7 Promjenljive u C-u Promjenljiva je memorijska lokacija koja može čuvati vrijednost Imena promjenljivih se nazivaju indetifikatori Identifikatori: niz slova, cifara (ne može biti na početku) i underscores( _ ) Case sensitive (važna su mala i velika slova) Promjenljive se moraju deklarisati prije upotrebe Ako naredba referencira nedeklarisanu promjenljivu, dolazi do sintaksne greške (compiler error)

8 Aritmetički operatori u C-u
Značenje + Sabiranje - Oduzimanje * Množenje / Dijeljenje % Ostatak pri dijeljenju ++ Inkrementiranje (ima najveći prioritet) -- Dekrementiranje =, +=, -=, *=, /=, %= Operatori dodjeljivanja

9 Operatori poređenja Operator Značenje ==
Provjerava da li su vrijednosti operanada jednake (Ne miješati ga sa operatorom „=“) != Provjerava da li su vrijednosti operanada različite > Provjerava da li je vrijednost prvog operanda veća od vrijednosti drugog < Provjerava da li je vrijednost prvog operanda manja od vrijednosti drugog >= Provjerava da li je vrijednost prvog operanda veća ili jednaka vrijednosti drugog <= Provjerava da li je vrijednost prvog operanda manja ili jednaka vrijednosti drugog

10 Logički operatori Operator Značenje && Logičko i || Logičko ili !
Negacija

11 Lvalue i rvalue Lvalue je izraz koji se može naći sa lijeve strane znaka jednakosti u programskom jeziku. Rvalue je izraz koji se može naći samo sa desne strane znaka jednakosti u programskom jeziku. Lvalue je moguće upotrijebiti kao rvalue, obratno nije moguće. Primjeri: a = 3; /*a je lvalue, a 3 je rvalue. 3=a; nije moguće*/ b = ( a=5 ); /*b je lvalue, a=5 je rvalue*/

12 IF kontrolna naredba Ako se u programu određeni dio koda može izvršiti samo ako je određeni uslov ispunjen, tada se koristi if naredba if(uslov){ naredbe; }

13 Petlje Petlje Petlja kontrolisana brojačem
Grupa instrukcija koja se ponavlja dok je neki uslov tačan Petlja kontrolisana brojačem Konačna petlja: poznat broj ponavljanja Kontrolna promjenljiva broji ponavljanja Petlja kontrolisan sentinelom Nedefinisan broj ponavljajnja Sentinel označava kraj unosa podataka Petlja kontrolisana uslovom Slična prethodnoj, sa razlikom da uslov ne zavisi od unosa podataka od strane korisnika

14 Petlje Petlje kontrolisane brojačem zahtijevaju
Ime kontrolne promjenljive (brojač) Početnu vrijednost brojača Inkrement (ili dekrement) koji mijenja kontrolnu promjeniljivu u svakoj iteraciji Uslov koji testira vrijednost brojača

15 While naredba Ako se u programu određeni dio koda treba izvršavati sve dok važi određeni uslov, koristi se while naredba Postoji i do...while naredba

16 For petlja for ( init; condition; increment ) { statement(s); }
init se izvršava na početku i jedino tada Zatim se provjerava tačnost uslova. Ako je uslov tačan, izvršava se tijelo petlje. Ako uslon nije tačan ide se na izvršavanje naredbe koja je iza for petlje. Nakon što se izvrši tijelo petlje izvršava se increment dio koda petlje u kojem se ažurira vrijednost promjenjljive kojom se kontroliše petlja. init i increment dio nijesu obavezni

17 Switch naredba Koristi se kada se promjenljiva ili izraz testira na sve vrijednosti koje može imati i za svaku vrijednost se preduzima različita akcija.

18 Primjeri 10 studenata rade test. Bodovi (između 0 i 100) su dati. Naći prosječan broj bodova na testu. Napisati program za izračunavanje srednje ocjene koji će obraditi proizvoljan broj studenata. Koristiti sentinel Takođe poznata kao signal vrijednost, dummy vrijednost ili flag vrijednost Označava kraj ulaznih podataka (“end of data entry.”) Petlja završava kada korisnik unese sentinel Sentinel se bira tako da ne može biti pomiješan sa regularnim ulazom (kao -1 u našem slučaju)

19 Primjer Simulator igre kockicama Pravila: Bacamo 2 kockice
7 ili 11 u prvom bacanju, igrač pobjeđuje 2, 3 ili 12 u prvom bacanju, igrač gubi 4, 5, 6, 8, 9, 10 – to su trenutni bodovi igrača, igra se nastavlja Ako ima drugog (i ostalih) bacanja, igrač mora da osvoji isti broj bodova kao i u prvom bacanju, i tada pobjeđuje; ako dobije 7, tada igrač gubi. Inače, igra se nastavlja.

20 Funkcije u C-u

21 Uvod Podijeli pa vladaj. Lakše je obrađivati djelove koda nego kompletan program. C standardne biblioteke imaju veliki broj funkcija Matematička biblioteka Standardna matematička izračunavanja #include <math.h> Sve matematičke funkcije vraćaju tip double Format poziva funkcija FunctionName( argument ); Ako ima više argumenata, razdvajamo ih zarezima

22 Prednosti korišćenja funkcija
Lakši razvoj programa (podijeli pa vladaj) Ponovno korišćenje softvera (software reusability)

23 Definisanje funkcija Format za definisanje funkcija
return-value-type function-name( parameter-list ) { declarations and statements } Funkcije ne mogu biti definisane unutar drugih funkcija Return-value-type: tip rezultata (default int) Parameter-list: lista parametara razdvojenih zarezima, deklariše parametre default-type: int

24 Header datoteke Prototip funkcije: Header datoteke
return-value-type function-name( parameter-list ); Imena argumenata su opcionalna u prototipu Header datoteke Sadrže prototipove funkcija za bibliotečke funkcije <stdlib.h> , <math.h> , itd. Učitavamo ih sa: #include <filename>, #include <math.h> Korisničke header datoteke Kreiramo datoteku sa funkcijom Sačuvamo je kao filename.h Uključujemo je u druge datoteke sa #include "filename.h" Ponovna upotreba funkcija

25 Predavanje argumenata
Po vrijednosti Kopija argumenta predaje se funkciji Promjena argumenta u funkciji ne utiče na original Koristiti kada funkcija ne treba da modifikuje argument Po referenci Predaje se originalni argument Promjena u funkciji utiče na original

26 Memorijske klase U zavisnosti od toga kojoj od memorijskih klasa objekat pripada imamo različito: Vrijeme memorisanja – koliko dugo objekat postoji u memoriji Opseg važenja (scope) – gdje objekat može biti referenciran u programu

27 Memorijske klase Automatske promjenljive Registarske promjenljive
Objekat je kreiran i uništen unutar svog bloka auto: default za lokalne promjenljive local variables auto double x, y; Registarske promjenljive register: pokušava da smjesti promjenljive u registre register int counter = 1; Statičke promjenljive Promjenljive postoje u toku čitavog vremena izvršavanja programa Default vrijednost je nula Čuvaju vrijednost po završetku funkcije Mogu se koristiti samo u funkciji u kojoj su definisane Globalne promjenljive Mogu se koristiti u svim funkcijama

28 Rekurzija Funkcije koje pozivaju same sebe
Dva su osnovna gradivna bloka rekurzije Bazni slučaj Rekurzivni korak Podijelimo problem na Šta možemo uraditi Šta ne možemo uraditi Ako ovaj dio podsjeća na originalni problem Funkcija startuje novu kopiju same sebe (rekurzivni korak - recursion step) da bi riješila problem

29 Nizovi

30 Uvod Niz je statička, homogena struktura podataka Definisanje niza
arrayType arrayName[ numberOfElements ]; Pristup elementu niza: arrayname[ position number ] Prvi element ima indeks 0

31 Nizovi karaktera char string1[] = "first";
Null karakter '\0' označava kraj stringa string1 u stvari ima 6 elemenata char string1[] = { 'f', 'i', 'r', 's', 't', '\0' };

32 Niz kao argument funkcije
Niz se predaje kao argument funkcije tako što se preda ime niza bez “uglastih” zagrada Veličina niza se obično predaje kao drugi argument Nizovi se predaju po referenci Ime niza je adresa prvog elementa Funkcija zna gdje je niz smješten u memoriji Elementi niza kao argumenti Predaju se po vrijednosti Predaje se kao obična promjenljiva (na primjer, myArray[ 3 ])

33 Višedimenzionalni nizovi
U C-u je moguće definisati višedimenzionalne nizove 2D nizovi se nazivaju matrice i njihovi elementi su raspoređeni u redovima i kolonama Row 0 Row 1 Row 2 Column 0 0 Column 1 Column 2 Column 3 a[ 0 ][ 0 ] a[ 1 ][ 0 ] a[ 2 ][ 0 ] a[ 0 ][ 1 ] a[ 1 ][ 1 ] a[ 2 ][ 1 ] a[ 0 ][ 2 ] a[ 1 ][ 2 ] a[ 2 ][ 2 ] a[ 0 ][ 3 ] a[ 1 ][ 3 ] a[ 2 ][ 3 ] Indeks reda Ime niza Indeks kolone

34 Primjer Potrebno je raskrčiti šumu koja ima X stabala. Drvosječa Filip može posjeći A stabala dnevno ali odmara svakog K-tog dana (K-tog. 2K-tog, 3K-tog...). Drvosječa Marko može posjeći B stabala dnevno ali odmara svakog M-tog dana. Drvosječe rade paralelno, pa ako istog dana rade onda posijeku ukupno A+B stabala. Napišite program koji za date brojeve A, K, B, M i X odrediti za koliko dana će dana Filip i Marko iskrčiti cijelu šumu. Ulaz: U jednom redu pet cijelih broja A, K, B, M i X razdvojena sa po jednim blankom, (1 ≤A,B ≤109, 2≤K, M≤109,1 ≤x ≤1018). Izlaz: Štampati traženi broj dana. Ulaz: Izlaz : 7

35 Pokazivači

36 Uvod Pokazivači (pointers) Moćna mogućnost, ali složena
Simuliraju u C-u prenos po referenci (call-by-reference) Tijesno su povezani sa nizovima i stringovima

37 Uvod Pokazivačke promjenljive
Sadrže memorijsku adresu kao svoju vrijednost Obične promjenljive sadrže određenu vrijednost (direct reference) Pokazivači sadrže adresu promjenljive koja ima određenu vrijednost (indirect reference) count 7 count 7 countPtr

38 Deklaracija i inicijalizacija pokazivača
Definicija pokazivača: Koristimo simbol * pointerType *myPtr; Više pokazivača u liniji - svaki mora da ima svoju * int *myPtr1, *myPtr2; Možemo definisati pokazivač na bilo koji tip podatka Pokazivač inicijalizujemo na 0, NULL ili nekom adresom 0 ili NULL – “points to nothing” (bolje je koristiti NULL )

39 Prenos argumenata po referenci
Prenos argumenata po referenci primjenom pokazivača Predaje se adresa operanda (& operator) Dozvoljava nam izmjenu vrijednosti u stvarnoj memorijskoj lokaciji Nizovi se ne predaju sa & jer je ime niza već pokazivač Koristi alias/nadimak za promjenljive unutar funkcije void double( int *number ) { *number = 2 * ( *number ); } *number je alias za predatu promjenljivu

40 Upotreba const sa pokazivačima
const kvalifikator Promjenljiva se ne može mijenjati Koristite const ako funkcija ne treba da mijenja promjenljivu Pokušaj promjene const promjenljive proizvodi grešku

41 Aritmetika pokazivača
Increment/decrement pokazivača (++ ili --) Dodavanje broja pokazivaču ( + ili += , - ili -=) Možemo oduzimati 2 pokazivača Operacije najčešće nemaju smisla, osim ako se izvode nad nizovima Poređenje pokazivača ( <, == , > ) Upoređuje koji pokazivač pokazuje na veći indeks u nizu Takođe, provjera da li pokazivač pokazuje na NULL

42 Veza pokazivača i nizova
Nizovi i pokazivači su tijesno povezani Ime niza je kao konstantni pokazivač Pokazivači mogu da zamijene indeksiranje niza Element b[ 3 ] Možemo mu pristupiti sa *( bPtr + 3 ) Ovo se zove pointer/offset notacija Možemo mu pristupiti sa bptr[ 3 ] Ovo se zove pointer/subscript notacija Možemo mu pristupiti sa *( b + 3 ) Pokazivačka aritmetika nad nizom

43 Pokazivači na funkcije
Pokazivač na funkciju Sadrži adresu funkcije Slično kao što je ime niza adresa prvog elementa, ime funkcije je početna adresa koda koji definiše funkciju Pokazivače na funkcije možemo Predati kao argument funkcijama Čuvati u elementima niza Dodjeljivati drugim pokazivačima na funkcije

44 Stringovi

45 Osnovni pojmovi Stringovi su nizovi karaktera
String literali (string konstante) – napisani sa dvostrukim navodnicima Mogu sadržati slova, cifre i specijalne karaktere Vrijednost stringa je adresa prvog karaktera

46 Definicija stringa Definišemo ih kao nizove karaktera ili promjenljive tipa char * char color[] = "blue"; char *colorPtr = "blue"; Zapamtite da stringovi predstavljaju nizove karaktera koji završavaju sa '\0' color ima 5 elemenata Ne zaboravite prostor u nizu za '\0'

47 Biblioteka za obradu karaktera
Biblioteka <ctype.h> Sadrži funkcije koje testiraju i manipulišu sa karakterima

48 Biblioteka za obradu karaktera

49 Funkcije za konverziju stringova
U biblioteci <stdlib.h>

50 Ulazno-izlazne funkcije
Funkcije u <stdio.h>

51 Biblioteka <string.h>

52 Biblioteka <string.h>

53 Ulazno-izlazne operacije

54 Uvod Tokovi (streams) su nizovi karaktera organizovani u linije
Svaka linija se sastoji od 0 ili više karaktera i završava karakterom newline ANSI C mora podržavati linije sa najmanje 254 karaktera Često mogu biti preusmjereni Standardni ulaz – tastatura Standardni izlaz – ekran Standardna greška – ekran Funkcije (gets, puts, getchat, putchar, scanf, printf, sscanf, sprintf, fscanf, fprintf)

55 Formatiranje izlaza Za precizno formatiranje izlaza koristimo funkciju printf Svaki poziv printf vraća vrijednost Broj prikazanih karaktera Negativan broj u slučaju greške Navode se specifikacije konverzije: flagovi, širina polja, preciznost, itd. Može se izvoditi zaokruživanje, poravnavanje kolona i lijevo i desno grupisanje, umetanje karaktera, eksponencijalni format, heksadecimalni format i fiksna širina i preciznost Format funkcije printf: printf( format kontrolni string, ostali argumenti ); Format kontrolni string: opisuje izlazni format Ostali argumenti: odgovaraju svakoj specifikaciji konverzije u format kontrolnom stringu Svaka specifikacija počinje znakom %, završava sa specifikatorom konverzije

56 Štampanje cijelih brojeva

57 Štampanje realnih brojeva
Realni brojevi u C-u mogu imati dvije notacije: Standardnu notaciju (150.3) Eksponencijalnu notaciju je 1.503E+02 u eksponencijalnoj notaciji

58 Štampanje realnih brojeva

59 Štampanje stringova i karaktera

60 Ostali specifikatori konverzije

61 Štampanje sa širinom polja i preciznošću
Značenje preciznosti varira u zavisnosti od tipa podatka Cijeli brojevi Minimalan broj cifara za prikaz (Ako je podatak premali dodaju se nule kao prefiksi) Realni brojevi Broj cifara iza decimalne tačke (za e i f) Maksimalan broj značajnih cifara (za g) Stringovi Maksimalan broj karaktera iz stringa

62 Štampanje sa širinom polja i preciznošću
Format specifikacije %width.precision Negativna širina polja – lijevo poravnavanje (left justified) Pozitivna širina polja – desno poravnavanje (right justified) Preciznost mora biti pozitivna Može se koristiti cjelobrojni izraz za određivanje širine polja i preciznosti Stavite (*) na mjesto za širinu polja ili preciznost Poklapaju se sa int argumentima u listi argumenata

63 Korišćenje flagova u prinf

64 Escape sekvence

65 Formatiranje ulaza sa scanf

66 Formatiranje ulaza sa scanf

67 Strukture, unije i enumeracije

68 Strukture Strukture su kolekcije povezanih promjenjljivih
Mogu sadržati promjenljive različitih tipova U kombinaciji sa pokazivačima, koriste se za kreiranje povezanih listi, stekova, redova i stabala

69 Definisanje strukture
Definicija strukture ne rezerviše memorijski prostor. Umjesto toga, kreira novi tip za definisanje strukturnih promjenljivih. Operacije nad strukturama: Dodjeljivanje strukture strukturi istog tipa Uzimanje adrese (&) strukture Pristupanje poljima (članovima) strukture Korišćenje sizeof operatora da bi se odredila veličina strukture (broj bajtova rezervisanih za strukturu)

70 Strukture kao argumenti funkcije
Predavanje cijele strukture ili predavanje individualnih članova U oba slučaja, predaju se po vrijednosti Za predavanje strukture po referenci predaje se adresa strukture

71 typedef Typedef kreira sinonime (aliase) za već definisane tipove podataka Važno: typedef ne kreira novi tip podataka, već samo kreira alias

72 Unije Unija je memorija koja sadrži različite objekte u različitim vremenima Sadrži samo jedan član u jednom trenutku Članovi unije dijele prostor Samo posljednji definisani član je dostupan

73 Unije Operacije nad unijama: Dodjeljivanje unije uniji istog tipa
Uzimanje adrese (&) unije Pristupanje članovima unije Korišćenje sizeof operatora da bi se odredila veličina unije

74 Enumeracije Skup cjelobrojnih konstanti predstavljenih identifikatorima Enumeracione konstante su kao simboličke konstante čije se vrijednosti automatski postavljaju Vrijednosti počinju od 0 i inkrementiraju se za 1 Vrijednosti se mogu eksplicitno postaviti sa = Potrebna su jedinstvena imena konstanti

75 Bit polja Članovi strukture čija je veličina (u bitovima) specificirana Omogućavaju bolju upotrebu memorije Moraju biti definisani kao int ili unsigned Ne može se pristupati pojedinačnim bitovima

76 Bit polja Neimenovana bit polja:
Polja koja se koriste kao dopuna (padding) u strukturi Ništa se ne može smjestiti u njih struct Example { unsigned a : 13; unsigned : 3; unsigned b : 4; } Neimenovana bit polja sa širinom polja 0 poravnavaju sledeće bit polje na novu granicu memorijske jedinice

77 Bitwise operatori

78 Bitwise operatori

79 Bitwise operatori dodjele

80 Prioritet operatora u C-u

81 Obrada datoteka

82 Uvod Datoteke se mogu kreirati, mijenjati i obrađivati u C programima
Koriste se za permanentno čuvanje podataka C posmatra svaku datoteku kao niz bajtova Tok (stream) se kreira pri otvaranju datoteke Tok obezbjeđuje komunikacioni kanal između datoteke i programa Otvaranje datoteke vraća pokazivač na FILE strukturu Programi mogu obrađivati više datoteka Svaka datoteka mora imati jedinstveno ime i imati svoj pokazivač na FILE.

83 Sekvencijalne datoteke
C ne pretpostavlja ništa o strukturi sekvencijalne datoteke Bez naznaka o zapisima u datoteci Programer mora obezbijediti strukturu datoteke

84 Read/Write funkcije fgetc -Čita jedan karakter iz datoteke
Ima argument tipa pokazivač na FILE fgetc( stdin ) je ekvivalentno sa getchar() fputs - Upisuje jedan karakter u datoteku Ima argument tipa pokazivač na FILE i karakter koji se upisuje kao argumente fputc( 'a', stdout ) ekvivalentno sa putchar( 'a' ) fgets - Učitava jedan red iz datoteke fputs - Upisuje jedan red u datoteku fscanf / fprintf - Rad sa datotekom ekvivavlentan sa scanf i printf

85 Mod pristupa fajlu

86 Datoteke sa slučajnim pristupom
Datoteke sa slučajnim pristupom omogućavaju: Pristup pojedinačnom zapisu bez pregledanja ostalih zapisa Podaci koji su ranije smješteni u datoteku mogu se mijenjati ili brisati bez prepisivanja

87 Datoteke sa slučajnim pristupom
Implementiraju se pomoću zapisa fiksne dužine 200 300 400 500 byte offsets } 100 100 bytes

88 Datoteke sa slučajnim pristupom
Podaci u datotekama sa slučajnim pristupom su neformatirani (čuvaju se kao sirovi bajtovi - "raw bytes") Svi podaci istog tipa (na primjer int) korsite istu količinu memorije Svi zapisi imaju isti tip fiksne dužine Podaci nijesu čitljivi čovjeku

89 Read/Write funkcije fwrite – za transfer bajtova iz bafera u datoteku
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream ); buffer – pokazivač na prvi od objekata koji upisujemo u datoteku size – veličina jednog objekta count – broj objekata stream – pokazivač na fajl u koji upisujemo fread – čita bajte iz datoteke size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

90 Fseek funkcija fseek - Postavlja pokazivač pozicije na određenu poziciju u datoteci int fseek( FILE *stream, long offset, int origin ); stream – pokazivač na fajl s kojim se manipuliše offset – broj bajta za koji se pomjeramo u odnosu na origin origin – uzima sljedeće vrijednosti SEEK_SET, SEEK_CUR, SEEK_END

91 Pretprocesor

92 Uvod Pretprocesiranje
Dešava se prije prevođenja (kompilacije) programa Uključivanje drugih datoteka Definisanje simboločkih konstanti i makroa Uslovna kompilacija programskog koda Uslovno izvršavanje pretprocesorskih direktiva

93 #include direktiva Kopira datoteku iz include direktive na mjesto direktive #include <filename> Pretražuje standardne biblioteke tražeći datoteku Koristi se za datoteke iz standardnih biblioteka include "filename" Pretražuje tekući direktorijum, pa zatim standardne biblioteke Koristi se za korisničke datoteke Koristi se za: Programe sa više source datoteka koje treba prevoditi zajedno Header datoteke – imaju opšte deklaracije i definicije (klase, strukture, prototipove funkcija) #include naredba u svakoj od datoteka

94 #define direktiva Pretprocesoka direktiva zakreiranje simboličkih konstanti i makroa Simboličke konstante Kada se program prevodi, sva pojavljivanja simboličke konstante zamjenjuju se odgovarajućim tekstom Ne mogu se redefinisati Format #define identifier replacement-text

95 #define direktiva Makro je operacija definisana sa pretprocesorskom direktivom #define Makro bez argumenata se tretira kao simbolička konstanta Makro sa argumentima – argumenti se zamjenjuju odgovarajućim tekstom Izvodi se samo zamjena teksta – nema provjere tipa Koriste se zagrade

96 #undef direktiva Ukida definiciju simboličke konstante ili makroa
Ako je ukinuta definicija simboličke konstante ili makroa, on kasnije može biti redefinisan

97 Uslovna kompilacija #if !defined( NULL ) #define NULL 0 #endif
Svako #if mora završiti sa #endif #ifdef je skraćenica za #if defined( name ) #ifndef je skraćenica za #if !defined( name ) #elif – ekvivalentano sa else if u if naredbi #else – ekvivalentano sa else u if naredbi

98 Ostale direktive #error
#error string – prikazuje dati string kao grešku i zaustavlja kompajliranje #line - Prenumeracija sledećih linija koda , počinje sa sa cjelobrojnom vrijednošću #line 100 "myFile.c" Linije su numerisane od 100 počevši sa sledećom source datotekom makes errors more meaningful # operator - Uzrokuje zamjenu tekst tokena u string sa navodnicima

99 Predefinisane simboličke konstante
__LINE__ - Broj tekuće linije koda (cjelobrojna konstanta). __FILE__ - Pretpostavljeno ime source datoteke (string). __DATE__ - Datum kada je datoteka kompajlirana (string oblika "Mmm dd yyyy") __TIME__ - Vrijeme kada je datoteka kompajlirana (string oblika "hh:mm:ss").


Download ppt "Uvod u programski jezik C"

Similar presentations


Ads by Google