[Powered by Google Translate] ROB Bowden: Se pou la pale sou konpilateur. Jis pwen sa a, ou te jis tape moute kòd sous ou a nan kèk dosye, voye yo nan bwat sa a gwo nwa ki se Rezone, epi soti vini dosye ègzèkutabl ou a, ki fè sa ki ekzakteman ki sa ou te ekri nan kòd sous ou a. Kòm majik kòm ki te gen, nou pwal pran yon pi pre gade a sa ki la aktyèlman pase lè nou konpile yon dosye. Se konsa, sa sa vle di konpile yon bagay? Oke, nan sans ki pi jeneral, li jis vle di transfòme kòd ekri nan yon sèl pwogramasyon lang a yon lòt. Men, anjeneral lè moun yo di yo konpile yon bagay yo, yo vle di yo ap pran li soti nan yon pwogram nivo ki pi wo lang nan yon lang programmation pi ba nivo. Sa yo ka parèt tankou yon tèm trè subjectif. Pou egzanp, pwobableman ou pa panse a C kòm yon wo nivo pwogramasyon lang, men ou konpile li. Men, li la tout manm fanmi. Kòm nou pral wè, asanble kòd la ak machin evantyèlman kòd ki nou konpile desann nan se definitivman yon pi ba nivo pase C. Malgre ke nou pral lè l sèvi avèk sonnen nan demonstrasyon jodi a, yon anpil nan ide sa yo isit la pote sou nan konpilateur lòt. Pou rezone, gen kat etap nan pi gwo nan an jeneral nan konpilasyon. Sa yo se youn, pretretman fè pa preproseseur a; de, konpilasyon fè pa du a; twa, asanble fè pa asanble a; ak kat, ki lye ak fè pa Linkshere la. Li kapab bay konfizyon wè yon sèl nan substeps yo nan an jeneral nan Konpilateur rezone yo rele du a, men nou pral jwenn yo sa. Nou pral lè l sèvi avèk yon senp pwogram alo mond kòm egzanp nou an nan tout videyo sa a. Se pou nou pran yon gade. Premye etap la se pretretman. Ki sa ki preproseseur la fè? Nan bèl anpil pwogram chak C ou janm li oswa ekri, ou te itilize liy nan kòd ki kòmanse ak yon regle. Mwen pral rele li regle, men ou ka rele tou nan li liv, nimewo siyen, oswa byen file. Nenpòt liy sa yo se yon direktiv preproseseur. Ou te pwobableman wè # defini ak # enkli anvan, men gen yo se plizyè plis ke preproseseur an rekonèt. Se pou nou ajoute yon # defini egzanp alo mond nou an. Koulye a, kite a kouri jis preproseseur a sou sa a dosye. Si yo pase clage E-drapo, w ap anseye l 'bay kouri jis preproseseur la. Ann gade pou wè sa k ap pase. Li sanble ke sonnen jis krache soti tout bagay nan liy lan lòd. Nan lòd pou konsève pou tout bagay sa yo pwodiksyon nan yon dosye nouvo rele hello2.c, nou pral ajoute> hello2.c li te komande nou an. Koulye a, kite a pran yon gade nan dosye preprocessed nou an. Ola, sa ki te pase nan pwogram kout nou an ti kras? Si nou ale tout wout la nan fon sa a ranpli, nou pral wè kèk nan kòd la ke nou aktyèlman te ekri. Remake defini nan # la ale ansanm ak tout chans pou yo non yo te ranplase ak ekzakteman ki sa nou espesifye nan # defini nan liy. Se konsa, sa yo se tout bagay sa yo typedefs ak deklarasyon fonksyon nan tèt la nan dosye a? Remake defini nan # pa t 'preproseseur a sèlman direktiv ke nou espesifye. Nou menm tou nou te gen ladan yo # stdio.h. Se konsa, tout liy yo fou yo se aktyèlman jis stdio.h kopye ak kole nan tèt la nan sa a dosye. Se poutèt sa dosye header yo, se pou itil pou fonksyon deklarasyon. Olye pou yo ki bezwen fè kopi ak keratin nan tout fonksyon an deklarasyon yo ou fè plan sou lè l sèvi avèk nan tèt la nan dosye ou a, preproseseur pral kopi ak keratin yo soti nan header a pote pou ou. Kounye a ke nou ap fè pretretman, nou deplase sou konpilasyon. Rezon ki fè nou rele sa a konpilasyon etap se paske sa a se etap la kote rezone aktyèlman konpile li yo soti nan C rive nan kòd asanble. Yo nan lòd yo gen rezone konpile yon dosye desann nan asanble a, men kontinye pa plis, pase l S la-drapo nan liy lan lòd. Se pou nou pran yon gade nan tout pèp la dosye ki te outputted. Li sanble ke byen yon lang diferan. Asanble kòd se trè processeur espesifik. Nan ka sa a, depi aparèy la CS50 ap kouri sou yon processeur vityèl x86, sa a se kòd x86 asanble. Trè kèk moun ekri dirèkteman nan kòd asanble jou sa yo, men vin chak pwogram C ou te janm ekri transfòme desann antre nan asanble. Yon fwa ankò, nou rele etap sa a konpile C a antre nan asanble depi nou pral soti nan yon pi wo nivo nan yon pi ba nivo pwogramasyon lang. Ki sa ki fè nivo asanble pi ba pase C? Oke, nan mitan tout pèp, nou yo trè limite nan sa nou kapab fè. Pa gen okenn si la, pandan y ap nan, pou la, oswa pasan nan nenpòt kalite. Men, ou kapab akonpli menm bagay yo ke sa yo kontwòl estrikti ofri lè l sèvi avèk operasyon yo limite ki asanble fè sa ki bay. Men, yo wè jis ki jan tout pèp ki ba nivo vrèman se, kite yo ale yon sèl etap plis nan konpilasyon nou an, rasanble. Li nan travay asanble a transfòme kòd la asanble nan objè oswa kòd machin. Sonje ke asanble a pa asanble pwodiksyon; olye, li pran nan mitan tout pèp ak sorti kòd machin. Kòd Machine se aktyèl 1 a la ak nan 0 ke yon CPU kapab konprann, malgre ke nou toujou gen yon ti jan ti nan travay kite anvan nou ka kouri pwogram nou an. Se pou nou rasanble kòd asanble nou nan pase Rezone c la-drapo. Koulye a, kite a wè sa ki nan dosye a reyini. Oke, ki pa kapab ede nou anpil. Sonje ke kòd machin lan se yo menm ki ak zewo ki òdinatè w lan ka konprann. Sa pa vle di li fasil pou nou pou n konprann. Se konsa, egzakteman kouman ba nivo a se tout pèp? Li nan prèske ki idantik ak kòd objè. Pral soti nan pèp kòd objè se pi plis nan yon tradiksyon pase yon transfòmasyon, ki se poukisa yon sèl pa ta ka konsidere asanble a fè nenpòt élaboration vrè. An reyalite, li nan trè fasil a manuelman tradui soti nan asanble nan kòd machin. Gade nan tout pèp la pou yon fonksyon prensipal yo, ki premye liy k ap pase nan koresponn ak 0x55 ekzadesimal. Nan binè, ki nan 1010101. Liy nan dezyèm k ap pase nan koresponn ekzadesimal 0x895. Ak pwochen, 0x56 la. Bay yon tab relativman senp, ou ta ka tradui asanble nan kòd la ki machin ka konprann tou. Se konsa, gen nan yon sèl etap ki rete nan konpilasyon, ki se ki lye ak. Ki lye ak konbine yon pakèt moun sou dosye objè nan yon sèl dosye gwo ke ou ka aktyèlman egzekite. Ki lye ak se trè sistèm depandan. Se konsa, fason ki pi fasil yo ka resevwa sonnen jis konekte objè dosye yo ansanm se yo rele rezone sou tout nan dosye yo ke ou vle konekte ansanm. Si ou presize. O dosye, lè sa a li pa pral bezwen fè rtrete, konpile, epi rasanble tout nan kòd sous ou a. Se pou nou voye jete yon fonksyon matematik nan dosye nou an, konsa nou gen yon bagay yo konekte pous Koulye a, kite nan konpile l 'tounen desann nan kòd objè ak rele rezone sou li. Wouch. Depi nou gen ladan yo yon fonksyon matematik, nou bezwen lyen an nan matematik bibliyotèk la ak-LM. Si nou te vle konekte ansanm pakèt moun sou. O dosye ke nou te ekri sou pwòp nou an, nou ta jis presize yo tout nan a liy lòd. Restriksyon a se ke youn sèlman nan sa yo dosye dwe aktyèlman presize nan yon fonksyon prensipal yo, oswa lòt moun ki kapab lakòz ègzèkutabl pa t 'vle konnen ki kote kòmanse kouri kòd ou a. Ki sa ki nan diferans ki genyen ant di egzakteman kisa yon fichie nan yon lyen an nan ak-l ak jis di egzakteman kisa yon dosye dirèkteman? Pa gen anyen. Se jis ke rezone k ap pase nan konnen ekzakteman ki sa dosye yon bagay tankou-LM k ap pase nan gade nan. Si ou te konnen ke dosye tèt ou, ou ta ka presize li ouvètman. Jis sonje ke nan tout-l drapo oblije vini nan fen a de demand kliyan ou yo. Epi sa a, tout gen ak li. Lè ou jis kouri rezone sou kèk dosye, sa a se ki sa li aktyèlman fè. Non mwen se Rob Bowden, ak sa a se CS50.