[Powered by Google Translate] ROB Bowden: Pogovorimo se o prevajalniki.
Do te točke, ste pravkar vnesli svoj izvorne kode v
nekatere datoteke, ki jih pošljejo po tej veliki črni skrinjici, ki je
Jek, in iz prihaja vaš izvedljivo datoteko, ki stori
točno to, kar si napisal v svoji izvorni kodi.
Kot čarobno, kot da je že, da bomo lahko približali
poglejte, kaj se pravzaprav dogaja
ko pripravijo dokumentacijo.
Torej, kaj to pomeni za sestavljanje kaj?
>> No, v najbolj splošnem pomenu, to pomeni le,
preoblikovanje kode, napisane v enem
programski jezik za drugo.
Ampak ponavadi, ko ljudje pravijo, da pripravi nekaj, ki jih
pomeni, da si s tem, da z višjega nivoja programiranja
jezika na nižji ravni programskega jezika.
To se lahko zdi kot zelo subjektivnih izrazov.
Na primer, vam verjetno ne misliš C, kakor so visoka
višji programski jezik, vendar vam ga pripravijo.
Ampak to je vse relativno.
Kot bomo videli, je skupščina kodo in na koncu stroj
Koda, ki jih pripravijo do nedvomno nižji ravni
kot C.
Čeprav bomo uporabljali Jek na današnji predstavitvi,
Veliko idej tu prenesejo na druge prevajalniki.
>> Za Jek, obstajajo štiri glavne korake v skupni
kompilacija.
To so eno, predobdelava opravi Preprocessor, 2,
sestavljanje opravi prevajalnik, 3, montaža
opravi monter in 4,
povezovanje opravi povezovalnik.
To je lahko zavajajoče, da je eden od substeps v skupni
Jek prevajalniki se imenuje prevajalnik, vendar
bomo prišli do tega.
Mi bomo z enostavnim Hello World program našem primeru
v tem videu.
Oglejmo si.
>> Prvi korak je predobdelava.
Kaj preprocesor storiti?
V precej vsak C-ste kdaj prebral ali pisno,
ste se uporablja vrstic kode, ki se začnejo z znakom.
Poklical bom pa hašiš, vendar pa lahko tudi rekli funtov, število
podpisati ali oster.
Vsaka taka linija preprocesor direktiva.
Verjetno ste že videli # # define in tudi prej, vendar
Obstaja več bolj zaveda, da je preprocesor.
Naj dodamo # define za naše zdravo primer v svetu.
Zdaj pa deluje ravno Preprocessor o tej zadevi.
S sprejemom clage zastavo-e, ki ste ga poučuje, da deluje
Samo preprocesor.
Poglejmo, kaj se zgodi.
Izgleda Jek samo izpljune vse
v ukazni vrstici.
Da bi prihranili vse te proizvodnje v novo datoteko, imenovano
hello2.c bomo priložiti> hello2.c na naš ukaz.
Zdaj pa si oglejte na naši preprocessed datoteke.
>> Opa, kaj se je zgodilo z našim kratko malo programa?
Če bomo šli vse do dna te datoteke, bomo videli
nekaj kode, ki smo dejansko napisal.
Obvestilo, da je odšla # define in vsi primerki ime
so zamenjali z natanko tisto, kar je določeno v
na # define linijo.
Torej, kaj so vse te typedefs in funkcijske izjave
Na vrhu datoteke?
Obvestilo, da je # define ni bil edini preprocesor
Direktiva, ki smo opredelili.
Imamo tudi # include stdio.h.
Torej, vse nore linije so v resnici le stdio.h kopiranje
in prilepite v vrhu te datoteke.
Zato header datoteke so tako koristne za funkcije
deklaracije.
Namesto da bi morali kopirati in prilepiti vse funkcije
Izjave ste načrt za uporabo na vrhu datoteke,
preprocesor bo kopiranje in jih prilepite iz glave
datoteko za vas.
>> Zdaj, ko smo opravili priprave podatkov, gremo na
kompilacija.
Razlog za to klicali korak kompilacijo je zato, ker je to
korak, kjer se dejansko ne Jek njegovo sestavo od C do
Sklop kode.
Da bi imeli Jek pripravijo dokumentacijo do skupščine, vendar je
naprej ni več, je mimo-S zastave
v ukazni vrstici.
Oglejmo si na skupščini
Datoteka je izhodni to.
Izgleda precej drugačen jezik.
Skupščina koda je zelo poseben procesor.
V tem primeru, ker je CS50 aparat deluje na
virtualna x86 procesor, to je x86 montažo koda.
Zelo malo ljudi pišete neposredno v zbirniku v teh dneh,
ampak dobi vsak program C kdaj napisal preoblikovala navzdol
v skupščini.
Spet pravimo ta korak prevajate C v montaži
saj se bomo z višjega nivoja na nižji ravni
programski jezik.
>> Kaj naredi montažo nižji ravni kot C?
No, pri montaži, smo zelo omejeni, kaj lahko storimo.
Ni, če je, medtem ko je v tujini, na to, ali zanke vseh vrst.
Vendar pa lahko izvedejo iste stvari, ki jih nadzorni
strukture nudijo uporabo omejene postopke, ki
skupščina ne zagotavlja.
Ampak, da vidite, kako nizko raven montaža je res, pojdiva
en korak naprej v naši zbiranje, sestavljanje.
To je monter je delo pretvoriti montažo kodo
v objekt ali strojni kodi.
Ne pozabite, da monter ne izhodni sklop;
temveč je potrebno pri montaži in strojni kodi izhodov.
Strojna koda je dejanska 1 in 0 je, da CPU lahko
razumem, čeprav imamo še vedno majhen košček dela ostalo
Preden lahko tečemo naš program.
Naj zberejo našo montažo kodo, s posredovanjem
Jek-c zastava.
Zdaj pa poglejmo, kaj je v sestavljeni datoteke.
>> No, to nam ne pomaga veliko.
Ne pozabite, da je stroj koda je tisti in ničel, da
računalnik razume.
To ne pomeni, da je enostavno za nas, da razumejo.
Torej, kako točno nizki ravni je skupščina?
To je skoraj enako kot izvorne kode.
Pot od zbiranja do izvorne kode, je veliko več
Prevajanje kot preoblikovanja, zaradi česar
1 morda ne upošteva, da monter
storiti vse dejanske prevesti.
Dejstvo je, da je zelo enostavno ročno prevajati
Sklop za strojno kodo.
Če pogledamo na skupščini za glavno funkcijo, da prva vrstica
se zgodi, da ustrezajo šestnajstiških 0x55.
V binarne, to je 1.010.101.
V drugi vrstici se zgodi, da ustrezajo šestnajstiško 0x895.
In naslednji, 0x56.
Glede na relativno enostavna tabela, lahko prevedete
montažo v kodo, ki lahko razumeli tudi stroji.
>> Torej je še en korak v
kompilacija, ki se povezuje.
Povezovanje združuje kup predmetov datotek v eno veliko datoteko
da lahko dejansko izvesti.
Povezovanje je zelo odvisen od sistema.
Tako je najlažji način, da bi dobili Jek, da samo povezavo predmet
Datoteke skupaj je, da pokličete na Jek vse datoteke, ki
želite povezati skupaj.
Če podate. Ø datoteke, potem ne bo potrebe po predelavi,
zbrati in zbrati vse svoje izvorne kode.
Naj vrže matematične funkcije v našo datoteko, tako da imamo
Nekaj ​​povezati noter
Zdaj pa jo prevesti nazaj v objektni kodi in
Jek pokličite na njej.
Ups.
Ker smo vključili matematične funkcije, moramo povezati v
math knjižnica s-lm.
>> Če bi želeli povezati kup. O datoteke, ki jih
Napisal sami, bi to le določite jih vsi po
ukazni vrstici.
Omejitev je, da je samo eden od teh dokumentov mora
dejansko določiti glavno funkcijo ali pa je
kar izvršljiv ne bi vedeli, kje začeti
prikazovati kodo.
Kakšna je razlika med navedete datoteko za povezavo v
s-l in le z navedbo datoteko neposredno?
Nič.
To je samo, da je Jek zgodi, da bi natančno vedeli, kaj datoteko
nekaj podobnega se zgodi, lm nanaša.
Če bi vedela, da je datoteka sami, jo lahko določite
eksplicitno.
Zapomnite si, da vse l zastave, da pridejo na koncu
vaše stranke povpraševanja.
>> In to je vse kar je z njo.
Ko zaženete, le Jek na nekaterih datotek, to je tisto, kar je
dejansko počne.
Moje ime je Rob Bowden, in to je CS50.