a. OSD O. Fi²er April 18, 2011
Obsah 1 2 3 4
Compiler - p eklada program, který vezme zdrojový text programu a p eloºí jej do jazyka stroje, coº jsou obvykle kódy instrukcí pro daný procesor. Výsledkem tohoto p ekladu obvykle není spustitelný program, protoºe v místech volání podprogram z jiných modul a knihoven nejsou konkrétní adresy t chto podprogram, ale pouze zna ky, které se zpracují pozd ji p i linkování. Soubor m, které produkuje p eklada se íká objektové soubory (nemá to nic spole ného s objektov orientovaným programováním). D leºitou funkcí p eklada e je syntaktická kontrola.
Linker - sestavení programu slouºí k sestavení samostatn p eloºených modul a knihoven do funk ního celku. Linker do kódu doplní konkrétní adresy podprogram (statický p eklad) nebo kód pro jejich zavolání (p i pouºití dynamických knihoven). Pokud vytvá íme spustitelný program (u knihoven to je trochu jinak), linker nakonec doplní do programu kód, který se pouºívá p i spu²t ní programu. Tato ást, stejn jako formát pouºitých statických nebo dynamických knihoven se li²í v závislosti na pouºitém opera ním systému a hardwarové platform. Pokud proto chceme vyrobit spustitelný program pro jinou platformu, musíme u jazyk typu C, provést p eklad na zvolené platform znovu. institution-log
Debugger program pro lad ní a hledání chyb v programu. Aby m lo lad ní s debuggerem smysl, je obvykle nutné íci p eklada i, aby do výsledného kódu p idal speciální zna ky, díky nimº si debugger bude um t spojit konkrétní ást binárního kódu programu s konkrétními ádky zdrojového textu.
Preprocessor speciální program pouºívaný v jazycích C a pro zpracovávání maker a symbolických konstant. Tento program v podstat provádí pouze textové náhrady denovaných symbol v textu a umoºnuje podmín ný p eklad. P íkazy pro preprocessor za ínají vºdy znakem m íºky (#), nap íklad #dene nebo #ifndef. P íkazy preprocessoru byste m li pouºívat co nejmén.
Assembler program pro p eklad jazyka symbolických instrukcí do binárního kódu. N kdy bývá nesprávn zam ován se samotným jazykem symbolických instrukcí, coº je vemi nízkoúrov ový jazyk, kde zdrojový kód tvo í posloupnost zkratek instrukcí procesoru. P i velmi speciálních p íleºitostech lze jazyk symbolických instrukcí kombinovat s kódem v jazyce C. Velmi speciální situace zahrnují p ístup k nejniºsím úrovním hardwaru a brutální optimalizace. P i b ºném programování se s tím nesetkáte (a ani by to v t²inou nebylo prosp ²né).
Syntaktická chyba proh e²ek proti gramatice programovacího jazyka. Po íta je matematický stroj a vyºaduje naprosto jednozna ný p edpis své innosti. Ve zdrojovém kódu nesmí být ºádné syntaktické chyby, aby bylo jednozna né, co má p eklada d lat. P eklada neví, co chcete naprogramovat, proto se nem ºe ani pokou²et o opravu va²ich chyb, to musíte ud lat sami. Mezi syntaktické chyby pat í p edev²ím p eklepy, ale m ºe to být také pouºití nekompatibilních datových typ nebo t eba chybné pouºití operátor (nap. nem ºete zkou²et násobit textové et zce).
Sémantická chyba chyba v logice va²eho programu. Vá² program m ºe být syntakticky správný, p eklada jej p eloºí, linker slinkuje, ale program p esto m ºe fungovat chybn. Za tyto chyby je vºdy zodpov dný programátor a je na n m, aby se jich zbavil. Tyto chyby p eklada ani linker neodhalí. Pokud máte ²t stí, m ºe na n p eklada nep ímo upozornit pomocí varovných hlá²ení p i p ekladu.
Chybové hlá²ení - error zpráva, kterou vám p eklada nebo linker sd lují, pro nelze z va²eho kódu vytvo it spustitelný program. Tato zpráva obvykle obsahuje jméno souboru a íslo ádku, kde se chyba nachází. Pozor! V jazyce C m ºe n kdy p eklada odhalit chybu na jiném ádku, neº je skute ná p í ina. Pokud se vám ozna ené íslo ádku nezdá, zkuste hledat chybu i n kolik ádk okolo. Abyste mohli co nejlépe lokalizovat své chyby, pi²te na kaºdý ádek zdrojového textu maximáln jeden p íkaz. Usnadníte si tím nejen lokalizaci chyb, ale i lad ní. Chybové hlá²ení obsahuje také vysv tlení, co je podle p eklada e ²patn. institution-log
Varovné hlá²ení - warning upozorn ní, kterým vám p eklada nebo linker dávají najevo, ºe vá² program sice moºná jde p eloºit, ale ºe obsahuje podez elé konstrukce, které mohou nazna ovat závaºn j²í problém. Moudrý programátor v nuje varovným hlá²ením p eklada e náleºitou pozornost. Va²í ambicí by m l být p eklad bez varovných hlá²ení. Dobré porozum ní chybovým hlá²ením vyºaduje znalost angli tiny a p edev²ím dobrou znalost fungování po íta e a logiky programovacího jazyka. Pokud zatím tyto znalosti nemáte, nezoufejte. Není tak t ºké se to nau it. ƒím více budete programovat, tím to pro vás bude snaz²í.
Make Program make je utilita pro automatizaci p ekladu zdrojových kód do binárních soubor (spustitelné soubory ELF, EXE, knihovny a podobn ). Soubor nazvaný ur uje postup utility make p i p ekladu a denuje závislosti mezi zdrojovými soubory. P i sestavování cíle sleduje make topologické se azení v. P estoºe jsou dnes v oblib r zná integrovaná vývojová prost edí (IDE) a jazykov specické kompilátory, je make a tedy i stále ²iroce vyºíván, zvlá²t pak na unixových platformách.
Ru ní kompilace. Napi²te si jednoduchý 'Hello word' program #include <stdio.h> int main(){ printf("hello World!\n); return 0; }. A p eloºte jej: g++ main.c -o hello Spu²t ním programu se na stdout vypí²e 'Hello World!' institution-log
Základní. Základní struktura je: target: dependencies [tab] system command Pro ná² p ípad tedy:. all: g++ main.c -o hello Pro spu²t ní vytvo te soubor, vypl te strukturu a spus t program 'make' institution-log
Pouºití závislostí. N kdy je vhodné pouºít více cíl. Pokud zm níte jen jeden soubor v projektu, nebudete muset rekompilovat v²e, ale pouze ten upravený. all: hello hello: main.o factorial.o hello.o g++ main.o factorial.o hello.o -o hello main.o: main.cpp g++ -c main.cpp factorial.o: factorial.cpp g++ -c factorial.cpp hello.o: hello.cpp g++ -c hello.cpp clean: rm -rf *.o hello V²imn te si cíle 'clean', ten slouºí k odstran ní v²ech generovaných soubor. institution-log
Prom nné a komentá e. # Promenna CC bude jmeno kompileru, ktery se pouzije CC=g++ # CFLAGS budou parametry, pouzite pri kompilaci CFLAGS=-c -Wall all: hello hello: main.o factorial.o hello.o $(CC) main.o factorial.o hello.o -o hello main.o: main.cpp $(CC) $(CFLAGS) main.cpp factorial.o: factorial.cpp $(CC) $(CFLAGS) factorial.cpp hello.o: hello.cpp $(CC) $(CFLAGS) hello.cpp clean: rm -rf *.o hello Prom nné mohou celý kód zp ehlednit a zjednodu²it. institution-log
Parametry kompilace man gcc -Wall = warnings on -pedantic = p ísná kontrola syntaxe kódu -c = c le -o = object le
dynamické knihovny. Pro zkompilování dynamické knihovny pouºijte následující konstrukci: libneco.so: neco1.o neco2.o... necon.o gcc -shared -o libneco.so neco1.o... necon.o -lm -shared = sdílená dynamická knihovna -lm = pokud knihovna volá funkce jiné knihovny, toto potla í chybovou hlá²ku -fpic = position-independent code - p idat k podmínkám kompilace *.o soubor -L. -lneco = p i kompilaci celého programu p idejte mezi objekty -L. = vloºí knihovnu v adresá i '.' -lname = jméno knuhovny (libneco.so) institution-log
Funkce main. Main je první funkce, která je spu²t na. int main(int argc, char **argv) { TELO } Prom nná argc obsahuje po et vstupních argument Pole argv obsahuje hodnoty argument
#include Vloºení knihovny do kódu:. #include "nd.h" #include "nsd.h" #include <stdio.h> - vyhledává soubor od aktuálního umíst ní souboru se zdrojovým kódem <> - vkládaný soubor vyhledává podle prom nné PATH anebo cest zadaných parametrem -I
For cyklus, if for cyklus. for (int i = 0; i < 20; i++){ TELO } If m ºete pouºít: ==,!=, <= >=, <, > shlukovat podmínky lze pomocí && a i f (i<0){ TELO } institution-log
fprintf Pro vypsání výstupu na stdout. fprintf(hodnota promenne x je %d a y=%d,x,y); %i - integer %d - double %c - char
sscanf Slouºí k p evedení hodnot ze vstupu - parsing. int a; sscanf(argv[1], "%i",&a); Z pole argv, polohy 1, na te integer do promenne a
institution-log Zadání Napi²te program 'main.c' vstupem jsou dva argumenty (dv celá ísla) do programu vloºte (include) poskytnuté dva dva zdrojové kódy (nd.c, nsd.c) výstupem je bu podíl dvou ísel anebo nalezený spole ný d litel Napi²te makele z poskytnutých soubor sestavte knihovnu (libnsd.so) P eloºte Vá² program, knihovnu a vytvo te nální program p idání knihovny do cesty - export LD_LIBRARY_PATH=.
Reference http://www.fit.vutbr.cz/~martinek/clang/gcc.html http://mrbook.org/tutorials/make/