[Powered by Google Translate] ROB Bowden: Pakalbėkime apie kompiliatorius. Iki šio punkto, jūs tiesiog atspausdinti savo kodą į kai kurie failai, išsiuntinėjo gabalus po šio didžiojo juodąją dėžę, kuri yra Apsukite metalinis garsas, ir iš ateina savo vykdomąjį failą, kad veikia , ką rašėte savo kodą. Kaip magiškas, kaip, kad buvo, mes ketiname imtis arčiau pažvelgti, kas iš tikrųjų vyksta kai mes parengia bylą. Taigi, ką tai reiškia, sudaryti kažką? Na, pačia bendriausia prasme, tai tiesiog reiškia transformuojant kodas parašytas vienoje programavimo kalbos į kitą. Bet paprastai, kai žmonės sako, kad jie sudaryti kažką, jie reiškia, kad jie iš aukštesnio lygmens programavimui kalba, kad žemesnio lygio programavimo kalba. Tai gali atrodyti labai subjektyvus. Pavyzdžiui, jūs tikriausiai ne galvoti apie C kaip aukštos lygio programavimo kalba, bet jūs kaupia jį. Bet visa tai santykinis. Kaip matysime, surinkimas kodas ir galiausiai mašina kodas, kad mes sudaryti žemyn neabejotinai yra žemesnio lygio nei C Nors mes Apsukite metalinis garsas šiandienos demonstravimo, daug idėjų čia perkelti į kitus kompiliatorius. Apsukite metalinis garsas, yra keturi pagrindiniai žingsniai bendras rinkinys. Tai yra vienas, pirminio apdorojimo atliekama Preprocesorius, du, kompiliatorių padaryta kompiliacija, trys, montavimas padaryti surinkėjas ir keturių, Jungiantis susiejimas padaryti. Ji gali būti painu, kad vienas bendras substeps Apsukite metalinis garsas kompiliatorius yra vadinamas kompiliatorių, bet mes gauti, kad. Mes naudojant paprastą hello world programa, kaip mūsų pavyzdyje per šį vaizdo įrašą. Leiskite pažvelgti. Pirmasis žingsnis yra pirminio apdorojimo. Ką Preprocesorius daryti? Beveik kiekvieną C programa jūs kada nors skaityti arba rašyti, jūs naudojote kodo eilutes, prasidedančias maišos. Aš kviesiu maišos, bet jūs taip pat gali reikalauti, kad svarų, skaičius pasirašyti, ar aštrus. Bet kuri tokia linija yra Preprocesorius direktyva. Jūs tikriausiai matė, # define # include prieš, bet yra yra kelios kad Preprocesorius pripažįsta. Pridėkime # define mūsų hello world pavyzdys. Dabar galime paleisti tik dėl šio dokumento procesorių. Išlaikius clage-E vėliava, jūs nurodantysis jį paleisti tik Preprocesorius. Leiskite pamatyti, kas atsitiks. Atrodo, kad Apsukite metalinis garsas tiesiog išspjauna viską, į komandų eilutę. , Siekiant išsaugoti šios produkcijos į naują failą pavadinimu hello2.c, mes pridėti> hello2.c į mūsų komandą. Dabar galime imtis mūsų apdorotų failo išvaizdą. Ei, kas atsitiko su mūsų trumpą mažai programos? Jei mes pereiti visą kelią į šį failą apačioje, mes pamatyti kai kodas, kad mes iš tikrųjų rašė. Atkreipkite dėmesį, kad # define dingo ir visi vardo atvejai buvo pakeisti, ką mes nurodyta # define liniją. Taigi, kas yra visų šių tikrų tipų ir funkcijos deklaracijos failo viršuje? Atkreipkite dėmesį, kad # define buvo ne tik Preprocesorius direktyvos, kad mes nurodytas. Mes taip pat turime # include stdio.h. Taigi, visi crazy linijų iš tikrųjų tik stdio.h kopijuoti ir įklijuoti į šį failą viršuje. Štai kodėl header files yra tokios naudingos funkcijos deklaracijas. Vietoj būtinybės kopijuoti ir įklijuoti funkcijos deklaracijos jūs planuojate naudojant failo viršuje Preprocesorius nukopijuoti ir įklijuoti juos iš antraštės failą. Dabar, kad mes padaryti išankstinio apdorojimo, mes pereiti į rinkinys. Priežastis, kodėl mes vadiname šį žingsnį rengimo, nes tai yra Apsukite metalinis garsas iš tiesų nėra jo sudarant nuo C žingsnis surinkimas kodas. Siekiant turėti Apsukite metalinis garsas parengia bylą surinkimo, bet tęsti ne toliau, perduoti jį-S vėliava į komandų eilutę. Paimkime pažvelgti į susirinkimo byla, kad buvo išvesti. Atrodo, kad gana kita kalba. Asamblėja kodas yra labai procesorius specifinis. Šiuo atveju, nes CS50 prietaisas veikia virtualus x86 procesorius, tai x86 surinkimas kodas. Labai mažai žmonių rašyti tiesiai į surenkant kodą šių dienų, bet kiekvienas jūs kada nors parašyti C programa bus transformuota surinkimas. Vėlgi, mes vadiname šį žingsnį skompilowaniem C į surinkimo nes mes ketiname iš aukštesnio lygio į žemesnio lygio programavimo kalba. Ką daro surinkimas mažesnį nei c? Na, surinkimas, mes labai ribotas, ką mes galime padaryti. Yra Ne, jei, o ', už tai, ar bet kokios rūšies kilpos. , Bet jūs galite atlikti tuos pačius dalykus, kad šie kontrolė struktūros pasiūlyti naudojant ribotus veiksmus, kad surinkimas iš tiesų suteikia. Tačiau pamatyti, kaip mažas surinkimas iš tiesų yra, eikime dar vieną žingsnį mūsų rengimo, montavimas. Tai surinkėjas darbą paversti surinkimo kodą į objektą ar kompiuterinio kodo pavidalu. Atminkite,, kad surinkėjas nėra išėjimo surinkimas; o, ji užima surenkant ir išėjimai kompiuterinio kodo pavidalu. Mašina kodas yra faktinis 1 ir 0, kad CPU gali suprasti, nors mes vis dar liko darbo Odrobineczkę prieš mes galime paleisti mūsų programą. Leiskite surinkti mūsų surinkimo kodą artimųjų Apsukite metalinis garsas-c vėliava. Dabar pažiūrėkime, kas surinkto byloje. Gerai, kad ne padėti mums labai daug. Atminkite, kad mašina kodas yra vienetų ir nulių, kad jūsų kompiuteris gali suprasti. Tai nereiškia, kad tai lengva mums suprasti. Taip tiksliai, kaip žemo lygio, surinkimas? Tai beveik identiškas objekto kodo. Ėjimas nuo surinkimo iki objekto kodas yra daug daugiau kaip transformacijos vertimas, kuris yra, kodėl gali apsvarstyti surinkėjo padaryti jokios faktinės sudarinėjusiems. Tiesą sakant, tai gana lengva rankiniu būdu versti iš surinkimas į mašininiu kodu. Žiūri pagrindinės funkcijos surinkimo, kad pirmoji eilutė atsitinka atitinka šešioliktainių 0x55. Dvejetainiu, kad 1.010.101. Antroji eilutė atsitinka, kad atitiktų šešioliktainis 0x895. Ir kitą, 0x56. Atsižvelgiant į gana paprasta lentelė, galite išversti surinkimas į kodą, kad mašinos gali suprasti per. Taigi čia vienas likęs žingsnis rinkinys, kuris yra susieti. Susiejimas apjungia objektų failų krūva į vieną didelį failą , kad jūs iš tikrųjų galite atlikti. Susiejimas yra pati sistema priklauso nuo. Todėl paprasčiausias būdas gauti Apsukite metalinis garsas tiesiog susieti objektą failus kartu yra skambinti Apsukite metalinis garsas apie visus failus, kurie norite susieti kartu. Jei nurodysite O failus, tada jis nebus būtinybės perdirbti, kaupti, ir surinkti visus savo kodą. Leiskite mesti matematinę funkciją į mūsų bylą, todėl mes turime ką susieti. Dabar tegul kaupia jį atgal į objekto kodo ir skambinti Apsukite metalinis garsas apie jį. Oi. Kadangi mes matematinę funkciją, turime susieti matematikos biblioteka-lm. Jei norime sujungti krūva o failai, kad mes parašė mūsų pačių, mes norime tiesiog nurodyti juos visus komandų eilutę. Apribojimas yra tai, kad tik vienas iš šių failų turi iš tikrųjų nurodyti pagrindinę funkciją, arba kitas todėl vykdomąjį negalėjo žinoti, kur pradėti paleisti savo kodą. Koks yra skirtumas tarp nurodant failą, kurį norite susieti -l, o tiesiog nurodant failą tiesiogiai? Nieko. Tai tiesiog, kad Apsukite metalinis garsas atsitinka, tiksliai žinoti, ką failą kažkas panašaus-LM atsitinka kreiptis į. , Jeigu jūs žinojo, kad byla sau, galite nurodyti jos aiškiai. Tiesiog neužmirškite, kad visi-l vėliavos turi ateiti pabaigoje savo klientų paklausą. Ir kad viskas yra į jį. Kai jūs tiesiog paleisti Apsukite metalinis garsas kai kurių failų, tai yra, ką ji iš tikrųjų daro. My name is Rob Bowden, ir tai yra CS50.