Hogyan működik a fordító c verem túlcsordulás az orosz

Kell egy munkaköri leírás nyelv fordítója estestvennom áll, hogy valaki, aki nem ismeri ezt a nyelvet. Hogy van egy tutorial a szellemében „Képzeld el, hogy egy fordító ebből lépni.”







Mivel tegnap azt tanítják a nyelvet. Syntax tűnik káosz, nem látok intézkedések listáját, hogy a fordító végzi során az elemzést, nem értik a nyelvet, amelyben az alrendszert érinti kifejezés és ennek eredményeként telt nyelvi elemek és funkciók. Minden ezek a karakterek nem világos, hogyan működnek. Ez nagyon különbözik attól, amit szoktam TCL amely podstanovschik, parancsok és azok paramétereit.

meghatározott december 3 '15 00:29

Meg kell gondolni, az alábbiak szerint.

Az összképet. C-vel fordított fájlok külön, a fordító nem tud semmit a többi fájl, ha ez kifejezetten nem szerepel a fájlban. Egyéb fájlok „behúzott” elpárologtató. (A nyelvművelő, igen, tudom etetni és .h fordítóprogram a Makefile, nem bonyolítja a képet feleslegesen.)

Előfeldolgozó. Átadta a kódot, és teszi a hülye szöveg makrók. #define X (Y, Z) az (int i = 0; i

Előfeldolgozó vonalak. Belül húr és a karakter literálok néhány karaktersor helyébe mások. Például, \ n helyébe a szimbólum a kód 10. Továbbá, a széles sztring literálok (wchar_t *) lehet alkalmazni set'a karakter konverziós a forrás fájlt UCS-2 vagy UCS-4, attól függően, hogy a fordító.







Tulajdonképpen fordító. Nem varázslat a fordító nem. Vannak kulcsszavakat (a. Ha, stb.) És funkciókat. Például, printf - egy funkció (standard könyvtár), printf ( "\ n.", 15) rekord; termel lefordított kód "\ n". hívó printf és paraméterek átadása, és 15. Hasonlóképpen, a hívás printf ( "\ n". ""); működik egy hívást a printf függvény paraméterek „\ n” és »« (ez a hívás sikertelen lesz futási idő). A fordító tudja a pontos szemantikája printf és joga, hogy egy csipetnyi, ha látja, hogy a paraméter típusok nem alkalmasak formátumszövegnek.

Optimizer. Azt a jogot, hogy helyettesítse bármilyen szerkezet egy sokkal hatékonyabb, a szabály, ha: ha mind a végső kimeneti értékek a felhasználó által látható és nem változik az eredmény, az átalakítás elfogadható. Példa: ha egy hosszú számítás mellékhatások nélkül, az eredmény, amely nem használja (azaz nem kinyomtatható), az optimalizáló joga van dobja ki őt. És azt is, hogy a jogot, hogy ne dobja. Például, a sorrendben számítási kifejezéseket a kifejezést A () + B () nincs definiálva, és akkor is, ha a funkció az A és B olyan mellékhatások, az optimalizáló joga ezek kiszámítására bármilyen sorrendben, és nem is lehet keverni. Ha azt szeretnénk, hogy az A () Számoljuk szigorúan B (). Használjon több explicit változó.

Meghatározatlan viselkedését. Itt a sárkányok. Van egy nagy sor runtime-helyzetekben (pl razymenovnie null pointer, amely túlmutat a kötött az array () vagy aláírt túlcsordulás!), A fordítóprogram már nem felel az eredmény. A fordító joga van feltételezni, hogy ez soha nem fog megtörténni, hogy ezt nem triviális következtetéseket, és alkalmazza azokat, hogy egyszerűsítse a kódot. Például: a kód

a fordító joga van feltételezni, hogy a kezelés m [1] soha nem történik, így a ciklus nem kerül végrehajtásra, így a kód fel kell szabadítani a korai visszatérés. vez Ezért szükséges, hogy igaz. Ezért nem lehet kiszámítani, és egyszerűsítse a teljes funkció előtt




Kapcsolódó cikkek