1 00:00:00,220 --> 00:00:02,300 [Powered by Google Translate] [Gør, Dunk] 2 00:00:02,300 --> 00:00:03,970 [Nate Hardison] [Harvard University] 3 00:00:03,970 --> 00:00:07,290 [Dette er CS50] [CS50.TV] 4 00:00:07,290 --> 00:00:11,620 Så lad os sige, at jeg har skrevet et lille C-program til at udskrive ordene "Hello, world!" 5 00:00:11,620 --> 00:00:14,550 og jeg har gemt den i en fil kaldet hello.c. 6 00:00:14,550 --> 00:00:17,450 Hvordan kan jeg faktisk køre dette program? 7 00:00:17,450 --> 00:00:20,860 Hvis jeg bare prøve at køre. C fil, det er ikke at gå på arbejde. 8 00:00:20,860 --> 00:00:24,800 >> Computeren vil ikke behandle det som et C-program som jeg bestemt. 9 00:00:24,800 --> 00:00:28,530 Det viser sig, at selv om C-kode ser temmelig kryptisk i starten, 10 00:00:28,530 --> 00:00:32,470 det er stadig ikke lavt niveau nok for computere at forstå det. 11 00:00:32,470 --> 00:00:36,800 Før du kan køre C-kode på en computer, skal du først at kompilere det, 12 00:00:36,800 --> 00:00:39,540 der forvandler din C-kode til maskinkode, 13 00:00:39,540 --> 00:00:44,380 der - som navnet antyder - er et binært format at maskinen kan forstå. 14 00:00:44,380 --> 00:00:48,240 >> Den nemmeste måde at gøre dette på er at bare bruge en kommando kaldet "make". 15 00:00:48,240 --> 00:00:52,690 Lav er et værktøj til udarbejdelse af kildekode. 16 00:00:52,690 --> 00:00:58,170 Det er ikke en compiler selv, men snarere et program, der organiserer kald af oversætteren 17 00:00:58,170 --> 00:01:01,660 på kildekodefiler, så tingene bliver samlet i den rigtige rækkefølge 18 00:01:01,660 --> 00:01:08,280 og på den rigtige måde, da kompiler-flag kan få slags komplicerede, som vi vil se. 19 00:01:08,280 --> 00:01:12,610 Det er især nyttigt, når du arbejder med store projekter med masser af kildekodefiler 20 00:01:12,610 --> 00:01:14,630 og mange forskellige biblioteker. 21 00:01:14,630 --> 00:01:19,450 Men det er også rart at bruge det, når du bare arbejder med en enkelt fil. 22 00:01:19,450 --> 00:01:22,610 Så lad os samle denne "Hello, world!" Program ved hjælp af lave. 23 00:01:22,610 --> 00:01:28,220 Navnet på min kilde kode filen er hello.c, så jeg vil skrive make hej, 24 00:01:28,220 --> 00:01:31,680 og gøre vil bruge sin standardopsætning at kompilere den. 25 00:01:31,680 --> 00:01:37,640 >> Forudsat alt går vel, kan jeg bruge kommandoen ls at liste alle filer i mappen, 26 00:01:37,640 --> 00:01:40,540 og jeg skal se en ny fil kaldet "hej". 27 00:01:40,540 --> 00:01:43,380 Denne fil kaldes en "eksekverbar" 28 00:01:43,380 --> 00:01:47,160 og det er i det binære format, som computeren kan forstå. 29 00:01:47,160 --> 00:01:51,370 Hvis vi åbner det op, kan vi se nogle tegn, som vi kan forstå, 30 00:01:51,370 --> 00:01:54,810 men for det meste er det bare en flok mumbo-jumbo. 31 00:01:54,810 --> 00:02:00,920 Men kan jeg køre denne fil og se det udskrive ud "Hello, world!" igen og igen. 32 00:02:00,920 --> 00:02:03,420 >> Åh, spændingen! 33 00:02:03,420 --> 00:02:06,650 Så lad os gå lidt tilbage til vores make kommando og se, hvad der egentlig skete 34 00:02:06,650 --> 00:02:09,580 for at frembringe den eksekverbare fil. 35 00:02:09,580 --> 00:02:12,690 Du kan se, at når jeg kørte gøre, det udskrives denne linje 36 00:02:12,690 --> 00:02:16,430  begynder med "klang" og slutter med "hello". 37 00:02:16,430 --> 00:02:21,770 Dette er at gøre påberåbelse af oversætteren - i dette tilfælde hedder "Dunk" 38 00:02:21,770 --> 00:02:27,720 med en flok standardflag eller optioner med henblik på at producere vores eksekverbar. 39 00:02:27,720 --> 00:02:31,380 >> Klang er én af en række af C-compilere ude i verden. 40 00:02:31,380 --> 00:02:34,050 Du har måske hørt eller anvendes andre dem, 41 00:02:34,050 --> 00:02:38,260 især en der hedder "gcc", der er specielt udbredt. 42 00:02:38,260 --> 00:02:42,160 Vi har valgt at bruge Dunk i CS50, fordi vi mener, det gør et virkelig godt stykke arbejde 43 00:02:42,160 --> 00:02:45,220 at give personer advarsler og fejlmeddelelser 44 00:02:45,220 --> 00:02:48,480 og fordi brugen er meget lig med gcc, 45 00:02:48,480 --> 00:02:52,100 så du kan temmelig nemt skifte mellem de to. 46 00:02:52,100 --> 00:02:56,050 >> Hvornår gør kørte Dunk, det løb det med en hel masse muligheder. 47 00:02:56,050 --> 00:02:59,360 Men det er ikke nødvendigt at bruge alle disse muligheder 48 00:02:59,360 --> 00:03:03,090  til bare udarbejde en enkelt. c. kildekode-fil. 49 00:03:03,090 --> 00:03:07,540 Alt hvad jeg behøver at gøre er at bruge klang hello.c. 50 00:03:07,540 --> 00:03:12,430 Igen, hvis alt går vel, dette giver en eksekverbar fil. 51 00:03:12,430 --> 00:03:19,670 Men hvis jeg forsøger at køre. / Hej, jeg får en fejl at sige, at der er ikke sådan fil eller mappe. 52 00:03:19,670 --> 00:03:20,910 Hvad er der sket? 53 00:03:20,910 --> 00:03:25,030 Klang af standardnavne sin eksekverbare a.out, 54 00:03:25,030 --> 00:03:28,640 som vi se, om vi liste telefonbogen med ls. 55 00:03:28,640 --> 00:03:34,210 Denne fil kan vi løbe, og det vil også printe ud "Hello, world!" efter hensigten. 56 00:03:34,210 --> 00:03:36,660 >> Hvis vi ønsker at omdøbe den eksekverbare, 57 00:03:36,660 --> 00:03:38,900 vi kan bruge kommandoen Flyt til at gøre det, 58 00:03:38,900 --> 00:03:43,040 men det meste af den tid, vi vil bare Dunk at gøre det ordentlig navngivning for os. 59 00:03:43,040 --> 00:03:46,280 Vi kan gøre dette med-o flag. 60 00:03:46,280 --> 00:03:50,160 Hvis jeg kører klang hello.c-o hej, 61 00:03:50,160 --> 00:03:53,100 så jeg får en eksekverbar navn "hej". 62 00:03:53,100 --> 00:03:58,080 The-o option er super fælles, så forvente at se og bruge det en masse. 63 00:03:58,080 --> 00:04:02,670 De næste klang indstillinger, du vil se en masse begynde med-W. 64 00:04:02,670 --> 00:04:06,800 Disse valgmuligheder styrer hvilke typer af advarsler Dunk giver dig om din kode. 65 00:04:06,800 --> 00:04:12,060 For eksempel kan Dunk advare dig, hvis du angiver en variabel, der er aldrig brugt. 66 00:04:12,060 --> 00:04:15,580 Hvis jeg sætte en int variabel kaldet x er hello.c 67 00:04:15,580 --> 00:04:22,520 og derefter kompilere med Dunk-Wunused-variabel hello.c-o hej, 68 00:04:22,520 --> 00:04:26,270 Klang advarer mig om denne ubrugte variabel i min kode. 69 00:04:26,270 --> 00:04:28,800 >> Nu er der et væld af forskellige advarsler typer, 70 00:04:28,800 --> 00:04:32,920 og det ville være klamt at skulle nævne dem alle ud, når du kører Dunk. 71 00:04:32,920 --> 00:04:38,570 I stedet er der en genvej mulighed for at slå dem alle på --Wall. 72 00:04:38,570 --> 00:04:42,020 Vi har dette slået til som standard, når du kører gøre i apparatet, 73 00:04:42,020 --> 00:04:45,970 så du får alle de advarsler om, at Dunk kan give dig om din kode. 74 00:04:45,970 --> 00:04:50,620 Generelt er at have din kode producere compilation advarsler ikke en god ting, 75 00:04:50,620 --> 00:04:55,160 og vi vil forvente, de programmer, som du skriver for CS50 at advare gratis. 76 00:04:55,160 --> 00:04:59,290 Men som du kan se, vil Dunk stadig producere en eksekverbar fil 77 00:04:59,290 --> 00:05:02,940 selv om der advarer ved opstillingstidspunktet processen. 78 00:05:02,940 --> 00:05:07,200 Vi kan dog tvinge Dunk at stoppe indsamlingen og producere en fejl 79 00:05:07,200 --> 00:05:10,440 hvis den støder på noget værd en advarsel i koden. 80 00:05:10,440 --> 00:05:14,000 Vi gør dette med-Werror mulighed. 81 00:05:14,000 --> 00:05:18,830 >> Nu, hvis jeg kompilere min hello.c fil med de ubrugte int variable x, 82 00:05:18,830 --> 00:05:21,190 Jeg vil ikke få en eksekverbar fil. 83 00:05:21,190 --> 00:05:23,880 Nu kan jeg ikke ignorere compilation advarsler. 84 00:05:23,880 --> 00:05:25,900 Jeg er nødt til at gå ordne min kode. 85 00:05:25,900 --> 00:05:30,030 En anden vigtig mulighed er-ggdb. 86 00:05:30,030 --> 00:05:33,640 Dette muliggør special debugging information i den eksekverbare fil, 87 00:05:33,640 --> 00:05:37,820 så jeg kan køre debugger, gdb, hvis det går ned. 88 00:05:37,820 --> 00:05:42,080 Uden denne mulighed, kan jeg ikke få adgang til en stor del af mit program informations inden gdb, 89 00:05:42,080 --> 00:05:44,660 ligesom variable og funktion navne, 90 00:05:44,660 --> 00:05:48,410 så det er vigtigt at medtage-ggdb, også. 91 00:05:48,410 --> 00:05:53,120 Når du kører gøre på apparatet, er denne mulighed også medtages som standard. 92 00:05:53,120 --> 00:05:56,820 >> Den sidste mulighed, at det er vigtigt at vide om er-l, 93 00:05:56,820 --> 00:05:59,320 som bruges til at forbinde bibliotekerne i din kode. 94 00:05:59,320 --> 00:06:04,190 For eksempel, hvis du ønsker at bruge funktioner fra CS50 biblioteket, ligesom GetString 95 00:06:04,190 --> 00:06:09,200 du nødt til at sørge for, at ikke nok med at du # include bibliotekets header fil, CS50.h, 96 00:06:09,200 --> 00:06:11,350 i din. c. kildekode fil 97 00:06:11,350 --> 00:06:15,250 men også, at du bruger-lcs50 ved udarbejdelsen, 98 00:06:15,250 --> 00:06:19,370 således at biblioteket gennemførelse er forbundet med dit program. 99 00:06:19,370 --> 00:06:24,300 Lad os ændre hej verden program til at bede brugeren om et navn med GetString funktion 100 00:06:24,300 --> 00:06:27,740 og derefter bruge navnet i vores hej streng. 101 00:06:27,740 --> 00:06:33,190 >> Nu, hvis vi forsøger at kompilere dette program o ved hjælp af-lcs50, 102 00:06:33,190 --> 00:06:36,790 vi får en fejl omkring en udefineret reference til GetString. 103 00:06:36,790 --> 00:06:43,580 Uh oh! Lad os tilføje i-lcs50, og nu alt fungerer fint. 104 00:06:43,580 --> 00:06:49,510 >> En gotcha er, at det gør en forskel, hvor i den kommando, du skriver-lcs50. 105 00:06:49,510 --> 00:06:55,770 Hvis jeg skriver det, før jeg skriver hello.c, så CS50 bibliotek er indlæst og behandles 106 00:06:55,770 --> 00:06:57,920 før min kildekode. 107 00:06:57,920 --> 00:07:01,430 Så det er som om jeg ikke skrive-lcs50 overhovedet. 108 00:07:01,430 --> 00:07:05,580 Som en tommelfingerregel, vil du generelt ønsker at sætte alle dine-l optioner 109 00:07:05,580 --> 00:07:08,070 i slutningen af ​​din kommando. 110 00:07:08,070 --> 00:07:10,490 Så lad os nu sætte det hele sammen. 111 00:07:10,490 --> 00:07:20,000 Klang-ggdb-Wall-Werror hello.c-lcs50-o hej - 112 00:07:20,000 --> 00:07:21,860 der er en masse ting. 113 00:07:21,860 --> 00:07:26,720 >> Det er derfor, fabrikat, er så hjælpsomme. Det tager sig af alt dette for dig. 114 00:07:26,720 --> 00:07:30,410 >> Så nu har du en god idé om, hvad der går ind kompilere din kode. 115 00:07:30,410 --> 00:07:33,470 Mit navn er Nate Hardison. Det er CS50. 116 00:07:33,470 --> 00:07:36,470 [CS50.TV]