1 00:00:07,200 --> 00:00:09,100 [Powered by Google Translate] ROB Bowden: Ejja nitkellmu dwar kumpilaturi. 2 00:00:09,100 --> 00:00:11,490 Sa dan il-punt, inti stajt biss ittajpjat up kodiċi tas-sors tiegħek fis 3 00:00:11,490 --> 00:00:14,260 xi fajls, mibgħuta lilhom permezz ta 'din il-kaxxa s-sewda kbir li huwa 4 00:00:14,260 --> 00:00:16,890 Clang, u barra taqa eżekutibbli fajl tiegħek li ma 5 00:00:16,890 --> 00:00:19,430 eżattament dak li kiteb fil-kodiċi tas-sors tiegħek. 6 00:00:19,430 --> 00:00:22,170 Kif maġika bħala li kien, aħna qed tmur biex tieħu aktar mill-qrib 7 00:00:22,170 --> 00:00:23,590 tħares lejn dak li verament jiġri 8 00:00:23,590 --> 00:00:25,220 meta aħna jikkompilaw fajl. 9 00:00:25,220 --> 00:00:28,580 Allura dak ma jfisser li jikkompilaw xi ħaġa? 10 00:00:28,580 --> 00:00:31,150 >> Ukoll, fl-iktar sens ġenerali, dan ifisser biss 11 00:00:31,150 --> 00:00:32,580 kodiċi trasformazzjoni miktub f'waħda 12 00:00:32,580 --> 00:00:34,680 programmazzjoni lingwa għal oħra. 13 00:00:34,680 --> 00:00:37,550 Imma normalment meta n-nies jgħidu li jiġbru xi ħaġa, huma 14 00:00:37,550 --> 00:00:39,660 tfisser li qed tieħdu minn programmazzjoni livell ogħla 15 00:00:39,660 --> 00:00:42,460 lingwa għal lingwa ta 'programmar aktar baxx livell. 16 00:00:42,460 --> 00:00:44,960 Dawn jistgħu jidhru simili f'termini ferm suġġettivi. 17 00:00:44,960 --> 00:00:48,090 Per eżempju, inti probabilment ma naħsibx ta 'C bħala għoli 18 00:00:48,090 --> 00:00:51,440 programmazzjoni livell tal-lingwa, imma inti josservawha. 19 00:00:51,440 --> 00:00:52,730 Imma dan kollu relattiva. 20 00:00:52,730 --> 00:00:55,790 Kif Ser naraw, il-kodiċi assemblaġġ u eventwalment magna 21 00:00:55,790 --> 00:00:59,270 kodiċi li aħna jikkompilaw 'li hija mingħajr dubju livell aktar baxx 22 00:00:59,270 --> 00:01:00,700 minn C. 23 00:01:00,700 --> 00:01:03,310 Għalkemm aħna ser tkun qed tuża clang fl dimostrazzjoni tal-lum, 24 00:01:03,310 --> 00:01:06,360 Ħafna mill-ideat hawn jitmexxew għal kompilaturi oħra. 25 00:01:06,360 --> 00:01:09,160 >> Għal clang, hemm erba 'passi ewlenin fil-kumplessiv 26 00:01:09,160 --> 00:01:10,200 kumpilazzjoni. 27 00:01:10,200 --> 00:01:15,430 Dawn huma wieħed, operazzjonijiet ta 'pretrattament li saret mill-preprocessor; tnejn, 28 00:01:15,430 --> 00:01:19,530 kompilazzjoni magħmula mill-kompilatur; 3, assemblaġġ 29 00:01:19,530 --> 00:01:22,010 isir mill-muntatur, u 4, 30 00:01:22,010 --> 00:01:24,640 jgħaqqdu isir mill-linker. 31 00:01:24,640 --> 00:01:27,600 Jista 'jkun konfuża li wieħed mill-substeps tal-kumplessiva 32 00:01:27,600 --> 00:01:30,980 Kompilaturi clang huwa msejjaħ il-kompilatur, iżda 33 00:01:30,980 --> 00:01:32,530 aħna ser jiksbu għal dak. 34 00:01:32,530 --> 00:01:35,050 Aħna ser tkun qed tuża programm sempliċi dinja bonjour bħala eżempju tagħna 35 00:01:35,050 --> 00:01:36,270 matul dan il-video. 36 00:01:36,270 --> 00:01:38,380 Ejja tagħti ħarsa. 37 00:01:38,380 --> 00:01:40,330 >> L-ewwel pass huwa operazzjonijiet ta 'pretrattament. 38 00:01:40,330 --> 00:01:42,520 X'jagħmel il-preprocessor jagħmlu? 39 00:01:42,520 --> 00:01:45,560 Fil pretty ħafna kull programm C li inti stajt qatt taqra jew bil-miktub, 40 00:01:45,560 --> 00:01:48,310 inti stajt użati linji ta 'kodiċi li jibdew bil-hash. 41 00:01:48,310 --> 00:01:51,730 I ser sejħa hija hash, imma int tista 'wkoll sejħa hija liri, in-numru 42 00:01:51,730 --> 00:01:53,280 tiffirma, jew li jaqtgħu. 43 00:01:53,280 --> 00:01:56,840 Kull linja bħal din hija direttiva preprocessor. 44 00:01:56,840 --> 00:02:00,650 You ħadthom probabbilment jidhru # tiddefinixxi u # Jinkludu qabel, iżda hemm 45 00:02:00,650 --> 00:02:03,690 huma aktar diversi li l-preprocessor jirrikonoxxi. 46 00:02:03,690 --> 00:02:07,340 Ejja żid # tiddefinixxi għall-eżempju tagħna fid-dinja bonjour. 47 00:02:07,340 --> 00:02:11,690 Issa ejja jimxu biss il-preprocessor fuq dan il-fajl. 48 00:02:11,690 --> 00:02:16,150 Billi tgħaddi clage-E-bandiera, int struzzjonijiet li jimxu 49 00:02:16,150 --> 00:02:17,880 biss il-preprocessor. 50 00:02:17,880 --> 00:02:19,130 Ejja naraw x'jiġri. 51 00:02:22,250 --> 00:02:24,020 Jidher qisu clang biss spits out kollox 52 00:02:24,020 --> 00:02:25,200 fil-linja tal-kmand. 53 00:02:25,200 --> 00:02:27,800 Sabiex tiffranka kollha ta 'dan l-output għall-fajl ġdida msejħa 54 00:02:27,800 --> 00:02:33,850 hello2.c, aħna ser tehmeż> hello2.c għall-kmand tagħna. 55 00:02:33,850 --> 00:02:37,800 Issa ejja tagħti ħarsa lejn fajl preprocessed tagħna. 56 00:02:37,800 --> 00:02:40,810 >> Whoa, dak li ġara lil programm tagħna ftit qasir? 57 00:02:40,810 --> 00:02:43,890 Jekk immorru-triq kollha lejn il-qiegħ ta 'dan il-fajl, Ser naraw 58 00:02:43,890 --> 00:02:46,070 xi wħud mill-kodiċi li għandna attwalment kiteb. 59 00:02:46,070 --> 00:02:49,800 Avviż li l jiddefinixxu # hija marret u l-każijiet ta 'isem 60 00:02:49,800 --> 00:02:51,950 ġew sostitwiti bl eżattament dak li aħna speċifikat 61 00:02:51,950 --> 00:02:53,590 l-# tiddefinixxi linja. 62 00:02:53,590 --> 00:02:56,530 Iva, liema huma dawn il-typedefs u dikjarazzjonijiet funzjoni 63 00:02:56,530 --> 00:02:58,140 fil-quċċata tal-fajl? 64 00:02:58,140 --> 00:03:00,820 Avviż li l jiddefinixxu # kienx il preprocessor biss 65 00:03:00,820 --> 00:03:02,390 direttiva li aħna speċifikat. 66 00:03:02,390 --> 00:03:05,280 Għandna wkoll # Jinkludu stdio.h. 67 00:03:05,280 --> 00:03:09,560 Allura kollha tal-linji crazy huma attwalment biss stdio.h kkupjati 68 00:03:09,560 --> 00:03:11,810 u pasted fil-quċċata ta 'dan il-fajl. 69 00:03:11,810 --> 00:03:14,110 C'est pourquoi fajls header huma tant utli għall-funzjoni 70 00:03:14,110 --> 00:03:15,160 dikjarazzjonijiet. 71 00:03:15,160 --> 00:03:17,740 Minflok li jeħtieġu li kopja u paste kollha tal-funzjoni 72 00:03:17,740 --> 00:03:21,050 dikjarazzjonijiet inti pjan dwar l-użu fil-quċċata tal-fajl tiegħek, il- 73 00:03:21,050 --> 00:03:22,990 preprocessor se kopja u paste minnhom mill-header 74 00:03:22,990 --> 00:03:24,140 fajl għalik. 75 00:03:24,140 --> 00:03:26,480 >> Issa li aħna qed isir operazzjonijiet ta 'pretrattament, nimxu fuq 76 00:03:26,480 --> 00:03:27,680 kumpilazzjoni. 77 00:03:27,680 --> 00:03:30,725 Ir-raġuni nitolbu dan kumpilazzjoni pass huwa għaliex dan huwa 78 00:03:30,725 --> 00:03:34,130 il-pass fejn clang attwalment ma kompilazzjoni tagħha minn C sa 79 00:03:34,130 --> 00:03:35,370 kodiċi assemblaġġ. 80 00:03:35,370 --> 00:03:38,280 Sabiex ikun hemm clang jikkompilaw fajl isfel għall-assemblaġġ, iżda 81 00:03:38,280 --> 00:03:42,030 tkompli aktar, jgħadduha lS-bandiera 82 00:03:42,030 --> 00:03:43,560 fil-linja tal-kmand. 83 00:03:43,560 --> 00:03:44,790 Ejja tagħti ħarsa lejn l-assemblaġġ 84 00:03:44,790 --> 00:03:47,390 fajl li kien outputted. 85 00:03:47,390 --> 00:03:49,740 Jidher qisu pjuttost lingwa differenti. 86 00:03:49,740 --> 00:03:52,660 Kodiċi Assemblea hija speċifika proċessur ħafna. 87 00:03:52,660 --> 00:03:55,440 F'dan il-każ, peress li l-appliance CS50 qed taħdem fuq 88 00:03:55,440 --> 00:04:00,470 proċessur x86 virtwali, dan huwa kodiċi assemblea x86. 89 00:04:00,470 --> 00:04:03,450 Ftit nies jiktbu direttament fil-kodiċi assemblaġġ dawn il-ġranet, 90 00:04:03,450 --> 00:04:06,490 iżda kull programm C Qatt tikteb gets trasformat isfel 91 00:04:06,490 --> 00:04:07,940 fis assemblaġġ. 92 00:04:07,940 --> 00:04:11,440 Għal darb'oħra, nagħmlu sejħa dan il-pass kompilazzjoni tal-C fis-assemblaġġ 93 00:04:11,440 --> 00:04:14,170 peress li aħna qed tmur minn livell ogħla għal livell aktar baxx 94 00:04:14,170 --> 00:04:15,480 programmazzjoni lingwa. 95 00:04:15,480 --> 00:04:17,880 >> Dak li jagħmel livell assemblea inqas minn C? 96 00:04:17,880 --> 00:04:21,660 Ukoll, fl-assemblaġġ, aħna huma limitati ħafna fil dak li nistgħu nagħmlu. 97 00:04:21,660 --> 00:04:25,120 M'hemm l-ebda jekk l-, filwaqt li s, għall huwa, jew linji ta 'kwalunkwe tip. 98 00:04:25,120 --> 00:04:27,560 Iżda int tista 'twettaq l-istess affarijiet li dawn l-kontroll 99 00:04:27,560 --> 00:04:30,270 istrutturi joffru tuża l-operazzjonijiet limitati li 100 00:04:30,270 --> 00:04:32,350 assemblaġġ ma jipprovdu. 101 00:04:32,350 --> 00:04:35,960 Iżda biex tara kemm assemblaġġ livell baxx hija verament, immorru 102 00:04:35,960 --> 00:04:39,320 pass ieħor fil-kumpilazzjoni tagħna, assemblaġġ. 103 00:04:39,320 --> 00:04:41,890 Huwa xogħol l-muntatur għall tittrasforma l-kodiċi assemblaġġ 104 00:04:41,890 --> 00:04:44,740 fil-għan jew l-kodiċi magna. 105 00:04:44,740 --> 00:04:47,610 Ftakar li l-muntatur ma assemblea output; 106 00:04:47,610 --> 00:04:51,080 pjuttost, hija tieħu fir assemblaġġ u l-kodiċi tal-magni outputs. 107 00:04:51,080 --> 00:04:54,040 Kodiċi magna hija l-attwali 1 u s 0 illi CPU jista 108 00:04:54,040 --> 00:04:57,290 jifhmu, għalkemm aħna xorta jkollhom ftit żgħira ta 'xogħol telqu 109 00:04:57,290 --> 00:04:59,380 qabel ma nistgħu run program tagħna. 110 00:04:59,380 --> 00:05:01,400 Ejja tiġbor kodiċi assemblea tagħna billi tgħaddi 111 00:05:01,400 --> 00:05:04,080 Il-c-clang bandiera. 112 00:05:04,080 --> 00:05:06,410 Issa ejja ara x'hemm fil-fajl immuntati. 113 00:05:06,410 --> 00:05:09,220 >> Ukoll, li ma tgħinna ħafna. 114 00:05:09,220 --> 00:05:11,340 Ftakar li l-kodiċi magna hija l-dawk żerijiet li 115 00:05:11,340 --> 00:05:13,240 kompjuter tiegħek jista 'jifhem. 116 00:05:13,240 --> 00:05:16,080 Dan ma jfissirx huwa faċli għalina biex nifhmu. 117 00:05:16,080 --> 00:05:19,160 Allura eżattament kif baxx il-livell huwa assemblea? 118 00:05:19,160 --> 00:05:21,480 Huwa kważi identiku għal kodiċi ta 'oġġett. 119 00:05:21,480 --> 00:05:24,300 Going minn assemblaġġ li kodiċi ta 'oġġett hija ħafna aktar ta' 120 00:05:24,300 --> 00:05:27,540 traduzzjoni minn trasformazzjoni, u huwa għalhekk li 121 00:05:27,540 --> 00:05:29,310 wieħed ma jista 'jikkunsidra l-muntatur għall- 122 00:05:29,310 --> 00:05:31,400 tagħmel xi kompilazzjoni attwali. 123 00:05:31,400 --> 00:05:34,110 Fil-fatt, huwa pjuttost faċli li manwalment tittraduċi minn 124 00:05:34,110 --> 00:05:36,050 assemblaġġ għall-kodiċi magna. 125 00:05:36,050 --> 00:05:39,040 Meta wieħed iħares lejn l-assemblea għal funzjoni prinċipali, dik il-linja 1 126 00:05:39,040 --> 00:05:42,100 jiġri li jikkorrispondu għal 0x55 hexadeċimali. 127 00:05:42,100 --> 00:05:45,470 F'dan binarju, li l-1010101. 128 00:05:45,470 --> 00:05:49,300 It-tieni linja jiġri li jikkorrispondu 0x895 hexadeċimali. 129 00:05:49,300 --> 00:05:51,290 U l-li jmiss, 0x56. 130 00:05:51,290 --> 00:05:53,730 Minħabba tabella relattivament sempliċi, inti tista 'tittraduċi 131 00:05:53,730 --> 00:05:57,130 assemblaġġ fil-kodiċi li magni jistgħu jifhmu wisq. 132 00:05:57,130 --> 00:05:58,810 >> Allura hemm pass wieħed li jifdal fl- 133 00:05:58,810 --> 00:06:01,150 kumpilazzjoni, li huwa jgħaqqdu. 134 00:06:01,150 --> 00:06:04,530 Linking tgħaqqad mazz ta 'fajls oġġett f'waħda fajl kbir 135 00:06:04,530 --> 00:06:06,380 li inti tista 'attwalment tesegwixxi. 136 00:06:06,380 --> 00:06:08,570 Linking hija dipendenti ħafna sistema. 137 00:06:08,570 --> 00:06:11,030 Allura l-eħfef mod biex jiksbu clang għal ftit link oġġett 138 00:06:11,030 --> 00:06:13,920 fajls flimkien huwa li sejħa clang fuq kollha tal-fajls li 139 00:06:13,920 --> 00:06:15,190 inti tixtieq li jgħaqqad flimkien. 140 00:06:15,190 --> 00:06:18,740 Jekk inti tispeċifika. Fajls o, allura mhux se jkollhom bżonn li mill-ġdid, 141 00:06:18,740 --> 00:06:21,680 tiġbor, u jiġbor kollha ta 'kodiċi tas-sors tiegħek. 142 00:06:21,680 --> 00:06:23,960 Ejja tarmi funzjoni matematika fil-fajl tagħna, hekk aħna 143 00:06:23,960 --> 00:06:25,210 xi ħaġa li torbot pulzieri 144 00:06:34,220 --> 00:06:37,010 Issa ejja josservawha lura għal kodiċi ta 'oġġett u 145 00:06:37,010 --> 00:06:38,260 sejħa clang fuqha. 146 00:06:40,560 --> 00:06:41,420 Oops. 147 00:06:41,420 --> 00:06:43,790 Minħabba li aħna kien jinkludi funzjoni matematika, għandna bżonn biex torbot b'mod 148 00:06:43,790 --> 00:06:46,610 il-librerija matematika ma 'lm. 149 00:06:46,610 --> 00:06:48,990 >> Jekk ridna li jgħaqqad flimkien mazz ta 'fajls. O li aħna 150 00:06:48,990 --> 00:06:51,420 kiteb fuq tagħna stess, aħna'd biss tispeċifika lilhom kollha fil- 151 00:06:51,420 --> 00:06:52,460 linja tal-kmand. 152 00:06:52,460 --> 00:06:55,320 Ir-restrizzjoni hija li wieħed biss minn dawn il-fajls għandu 153 00:06:55,320 --> 00:06:57,790 fil-fatt jispeċifika funzjoni prinċipali, jew inkella l- 154 00:06:57,790 --> 00:06:59,930 eżekutibbli li jirriżultaw ma jkunux jafu fejn tibda 155 00:06:59,930 --> 00:07:00,910 running kodiċi tiegħek. 156 00:07:00,910 --> 00:07:03,360 X'hemm differenza bejn tispeċifika fajl li torbot fl- 157 00:07:03,360 --> 00:07:06,600 ma 'lu biss tispeċifika fajl direttament? 158 00:07:06,600 --> 00:07:07,440 Xejn. 159 00:07:07,440 --> 00:07:09,850 Huwa biss li clang jiġri li tkun taf eżattament liema fajl 160 00:07:09,850 --> 00:07:12,560 xi ħaġa bħal-lm jiġri li jirreferu għall. 161 00:07:12,560 --> 00:07:14,700 Jekk inti kienu jafu dan il-fajl innifsek, inti tista 'tispeċifika li 162 00:07:14,700 --> 00:07:15,930 b'mod espliċitu. 163 00:07:15,930 --> 00:07:18,990 Just ftakar li l-l bnadar jkollhom jiġu fit-tmiem 164 00:07:18,990 --> 00:07:20,770 tad-domanda klijent tiegħek. 165 00:07:20,770 --> 00:07:22,300 >> U li kollox hemm għaliha. 166 00:07:22,300 --> 00:07:24,940 Meta inti biss run clang għal xi każijiet, dan huwa dak li huwa 167 00:07:24,940 --> 00:07:26,350 fil-fatt jagħmlu. 168 00:07:26,350 --> 00:07:29,490 Jisimni Rob Bowden, u dan huwa CS50.