[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.