[Powered by Google Translate] ROB Bowden: Ejja nitkellmu dwar kumpilaturi. Sa dan il-punt, inti stajt biss ittajpjat up kodiċi tas-sors tiegħek fis xi fajls, mibgħuta lilhom permezz ta 'din il-kaxxa s-sewda kbir li huwa Clang, u barra taqa eżekutibbli fajl tiegħek li ma eżattament dak li kiteb fil-kodiċi tas-sors tiegħek. Kif maġika bħala li kien, aħna qed tmur biex tieħu aktar mill-qrib tħares lejn dak li verament jiġri meta aħna jikkompilaw fajl. Allura dak ma jfisser li jikkompilaw xi ħaġa? Ukoll, fl-iktar sens ġenerali, dan ifisser biss kodiċi trasformazzjoni miktub f'waħda programmazzjoni lingwa għal oħra. Imma normalment meta n-nies jgħidu li jiġbru xi ħaġa, huma tfisser li qed tieħdu minn programmazzjoni livell ogħla lingwa għal lingwa ta 'programmar aktar baxx livell. Dawn jistgħu jidhru simili f'termini ferm suġġettivi. Per eżempju, inti probabilment ma naħsibx ta 'C bħala għoli programmazzjoni livell tal-lingwa, imma inti josservawha. Imma dan kollu relattiva. Kif Ser naraw, il-kodiċi assemblaġġ u eventwalment magna kodiċi li aħna jikkompilaw 'li hija mingħajr dubju livell aktar baxx minn C. Għalkemm aħna ser tkun qed tuża clang fl dimostrazzjoni tal-lum, Ħafna mill-ideat hawn jitmexxew għal kompilaturi oħra. Għal clang, hemm erba 'passi ewlenin fil-kumplessiv kumpilazzjoni. Dawn huma wieħed, operazzjonijiet ta 'pretrattament li saret mill-preprocessor; tnejn, kompilazzjoni magħmula mill-kompilatur; 3, assemblaġġ isir mill-muntatur, u 4, jgħaqqdu isir mill-linker. Jista 'jkun konfuża li wieħed mill-substeps tal-kumplessiva Kompilaturi clang huwa msejjaħ il-kompilatur, iżda aħna ser jiksbu għal dak. Aħna ser tkun qed tuża programm sempliċi dinja bonjour bħala eżempju tagħna matul dan il-video. Ejja tagħti ħarsa. L-ewwel pass huwa operazzjonijiet ta 'pretrattament. X'jagħmel il-preprocessor jagħmlu? Fil pretty ħafna kull programm C li inti stajt qatt taqra jew bil-miktub, inti stajt użati linji ta 'kodiċi li jibdew bil-hash. I ser sejħa hija hash, imma int tista 'wkoll sejħa hija liri, in-numru tiffirma, jew li jaqtgħu. Kull linja bħal din hija direttiva preprocessor. You ħadthom probabbilment jidhru # tiddefinixxi u # Jinkludu qabel, iżda hemm huma aktar diversi li l-preprocessor jirrikonoxxi. Ejja żid # tiddefinixxi għall-eżempju tagħna fid-dinja bonjour. Issa ejja jimxu biss il-preprocessor fuq dan il-fajl. Billi tgħaddi clage-E-bandiera, int struzzjonijiet li jimxu biss il-preprocessor. Ejja naraw x'jiġri. Jidher qisu clang biss spits out kollox fil-linja tal-kmand. Sabiex tiffranka kollha ta 'dan l-output għall-fajl ġdida msejħa hello2.c, aħna ser tehmeż> hello2.c għall-kmand tagħna. Issa ejja tagħti ħarsa lejn fajl preprocessed tagħna. Whoa, dak li ġara lil programm tagħna ftit qasir? Jekk immorru-triq kollha lejn il-qiegħ ta 'dan il-fajl, Ser naraw xi wħud mill-kodiċi li għandna attwalment kiteb. Avviż li l jiddefinixxu # hija marret u l-każijiet ta 'isem ġew sostitwiti bl eżattament dak li aħna speċifikat l-# tiddefinixxi linja. Iva, liema huma dawn il-typedefs u dikjarazzjonijiet funzjoni fil-quċċata tal-fajl? Avviż li l jiddefinixxu # kienx il preprocessor biss direttiva li aħna speċifikat. Għandna wkoll # Jinkludu stdio.h. Allura kollha tal-linji crazy huma attwalment biss stdio.h kkupjati u pasted fil-quċċata ta 'dan il-fajl. C'est pourquoi fajls header huma tant utli għall-funzjoni dikjarazzjonijiet. Minflok li jeħtieġu li kopja u paste kollha tal-funzjoni dikjarazzjonijiet inti pjan dwar l-użu fil-quċċata tal-fajl tiegħek, il- preprocessor se kopja u paste minnhom mill-header fajl għalik. Issa li aħna qed isir operazzjonijiet ta 'pretrattament, nimxu fuq kumpilazzjoni. Ir-raġuni nitolbu dan kumpilazzjoni pass huwa għaliex dan huwa il-pass fejn clang attwalment ma kompilazzjoni tagħha minn C sa kodiċi assemblaġġ. Sabiex ikun hemm clang jikkompilaw fajl isfel għall-assemblaġġ, iżda tkompli aktar, jgħadduha lS-bandiera fil-linja tal-kmand. Ejja tagħti ħarsa lejn l-assemblaġġ fajl li kien outputted. Jidher qisu pjuttost lingwa differenti. Kodiċi Assemblea hija speċifika proċessur ħafna. F'dan il-każ, peress li l-appliance CS50 qed taħdem fuq proċessur x86 virtwali, dan huwa kodiċi assemblea x86. Ftit nies jiktbu direttament fil-kodiċi assemblaġġ dawn il-ġranet, iżda kull programm C Qatt tikteb gets trasformat isfel fis assemblaġġ. Għal darb'oħra, nagħmlu sejħa dan il-pass kompilazzjoni tal-C fis-assemblaġġ peress li aħna qed tmur minn livell ogħla għal livell aktar baxx programmazzjoni lingwa. Dak li jagħmel livell assemblea inqas minn C? Ukoll, fl-assemblaġġ, aħna huma limitati ħafna fil dak li nistgħu nagħmlu. M'hemm l-ebda jekk l-, filwaqt li s, għall huwa, jew linji ta 'kwalunkwe tip. Iżda int tista 'twettaq l-istess affarijiet li dawn l-kontroll istrutturi joffru tuża l-operazzjonijiet limitati li assemblaġġ ma jipprovdu. Iżda biex tara kemm assemblaġġ livell baxx hija verament, immorru pass ieħor fil-kumpilazzjoni tagħna, assemblaġġ. Huwa xogħol l-muntatur għall tittrasforma l-kodiċi assemblaġġ fil-għan jew l-kodiċi magna. Ftakar li l-muntatur ma assemblea output; pjuttost, hija tieħu fir assemblaġġ u l-kodiċi tal-magni outputs. Kodiċi magna hija l-attwali 1 u s 0 illi CPU jista jifhmu, għalkemm aħna xorta jkollhom ftit żgħira ta 'xogħol telqu qabel ma nistgħu run program tagħna. Ejja tiġbor kodiċi assemblea tagħna billi tgħaddi Il-c-clang bandiera. Issa ejja ara x'hemm fil-fajl immuntati. Ukoll, li ma tgħinna ħafna. Ftakar li l-kodiċi magna hija l-dawk żerijiet li kompjuter tiegħek jista 'jifhem. Dan ma jfissirx huwa faċli għalina biex nifhmu. Allura eżattament kif baxx il-livell huwa assemblea? Huwa kważi identiku għal kodiċi ta 'oġġett. Going minn assemblaġġ li kodiċi ta 'oġġett hija ħafna aktar ta' traduzzjoni minn trasformazzjoni, u huwa għalhekk li wieħed ma jista 'jikkunsidra l-muntatur għall- tagħmel xi kompilazzjoni attwali. Fil-fatt, huwa pjuttost faċli li manwalment tittraduċi minn assemblaġġ għall-kodiċi magna. Meta wieħed iħares lejn l-assemblea għal funzjoni prinċipali, dik il-linja 1 jiġri li jikkorrispondu għal 0x55 hexadeċimali. F'dan binarju, li l-1010101. It-tieni linja jiġri li jikkorrispondu 0x895 hexadeċimali. U l-li jmiss, 0x56. Minħabba tabella relattivament sempliċi, inti tista 'tittraduċi assemblaġġ fil-kodiċi li magni jistgħu jifhmu wisq. Allura hemm pass wieħed li jifdal fl- kumpilazzjoni, li huwa jgħaqqdu. Linking tgħaqqad mazz ta 'fajls oġġett f'waħda fajl kbir li inti tista 'attwalment tesegwixxi. Linking hija dipendenti ħafna sistema. Allura l-eħfef mod biex jiksbu clang għal ftit link oġġett fajls flimkien huwa li sejħa clang fuq kollha tal-fajls li inti tixtieq li jgħaqqad flimkien. Jekk inti tispeċifika. Fajls o, allura mhux se jkollhom bżonn li mill-ġdid, tiġbor, u jiġbor kollha ta 'kodiċi tas-sors tiegħek. Ejja tarmi funzjoni matematika fil-fajl tagħna, hekk aħna xi ħaġa li torbot pulzieri Issa ejja josservawha lura għal kodiċi ta 'oġġett u sejħa clang fuqha. Oops. Minħabba li aħna kien jinkludi funzjoni matematika, għandna bżonn biex torbot b'mod il-librerija matematika ma 'lm. Jekk ridna li jgħaqqad flimkien mazz ta 'fajls. O li aħna kiteb fuq tagħna stess, aħna'd biss tispeċifika lilhom kollha fil- linja tal-kmand. Ir-restrizzjoni hija li wieħed biss minn dawn il-fajls għandu fil-fatt jispeċifika funzjoni prinċipali, jew inkella l- eżekutibbli li jirriżultaw ma jkunux jafu fejn tibda running kodiċi tiegħek. X'hemm differenza bejn tispeċifika fajl li torbot fl- ma 'lu biss tispeċifika fajl direttament? Xejn. Huwa biss li clang jiġri li tkun taf eżattament liema fajl xi ħaġa bħal-lm jiġri li jirreferu għall. Jekk inti kienu jafu dan il-fajl innifsek, inti tista 'tispeċifika li b'mod espliċitu. Just ftakar li l-l bnadar jkollhom jiġu fit-tmiem tad-domanda klijent tiegħek. U li kollox hemm għaliha. Meta inti biss run clang għal xi każijiet, dan huwa dak li huwa fil-fatt jagħmlu. Jisimni Rob Bowden, u dan huwa CS50.