1 00:00:06,692 --> 00:00:09,470 [Powered by Google Translate] NATE Hardison: I programmering er et bibliotek en samling av 2 00:00:09,470 --> 00:00:11,380 relatert forhåndsskrevet kode. 3 00:00:11,380 --> 00:00:14,350 Bibliotekene er hvordan vi som programmerere, dele felles og 4 00:00:14,350 --> 00:00:16,930 nyttig kode med hverandre, med de ulike programmene vi 5 00:00:16,930 --> 00:00:19,470 skrive, og selv med de forskjellige prosesser som kjører på 6 00:00:19,470 --> 00:00:21,380 samtidig på våre datamaskiner. 7 00:00:21,380 --> 00:00:23,000 >> La oss utforske litt. 8 00:00:23,000 --> 00:00:25,070 En av de mer vanlige funksjoner som du sikkert har 9 00:00:25,070 --> 00:00:27,500 brukt er printf funksjonen. 10 00:00:27,500 --> 00:00:29,820 Nå er printf ikke noen magisk funksjon som har vært 11 00:00:29,820 --> 00:00:31,670 hardkodet i datamaskinen - 12 00:00:31,670 --> 00:00:34,320 snarere er det en del av C Standard biblioteker, som er 13 00:00:34,320 --> 00:00:36,080 en samling av funksjoner som følger med 14 00:00:36,080 --> 00:00:38,050 C programmeringsspråk. 15 00:00:38,050 --> 00:00:40,920 Siden printf ikke er bygget inn i datamaskinen, betyr det at 16 00:00:40,920 --> 00:00:43,520 det var noen programmerer som faktisk gikk inn og skrev 17 00:00:43,520 --> 00:00:46,310 printf funksjon og pakket med resten av standarden 18 00:00:46,310 --> 00:00:48,880 bibliotekene, slik at fremtidige programmerere ikke ville ha til å 19 00:00:48,880 --> 00:00:50,310 duplisere innsatsen. 20 00:00:50,310 --> 00:00:52,620 Og vi er sikker takknemlig for at det er tilfelle, fordi sjekk 21 00:00:52,620 --> 00:00:54,710 ut hvor mye kode det faktisk tar å gjennomføre printf. 22 00:00:59,590 --> 00:01:02,860 >> C-Standard Biblioteker, hvorav printf er en del, er 23 00:01:02,860 --> 00:01:04,480 en av de viktigste verktøyene du 24 00:01:04,480 --> 00:01:06,770 har i å takle CS50. 25 00:01:06,770 --> 00:01:08,780 I tillegg til input-output bibliotek der 26 00:01:08,780 --> 00:01:11,370 printf liv, er det en haug med andre bibliotek som 27 00:01:11,370 --> 00:01:14,230 vil du sannsynligvis bruke i løpet av CS50. 28 00:01:14,230 --> 00:01:16,730 For eksempel, har strengen biblioteket funksjoner til 29 00:01:16,730 --> 00:01:20,960 sammenligne C strenger, får sin lengde, og sette sammen dem. 30 00:01:20,960 --> 00:01:22,410 Og regnestykket biblioteket gir deg nyttig 31 00:01:22,410 --> 00:01:25,062 konstanter, som pi og e. 32 00:01:25,062 --> 00:01:27,650 Nå, i forhold til standard biblioteker av andre programmeringsspråk 33 00:01:27,650 --> 00:01:31,190 språk, C Standard Bibliotekene er veldig små, 34 00:01:31,190 --> 00:01:34,060 men de har fortsatt en betydelig mengde ting. 35 00:01:34,060 --> 00:01:36,370 Og det er ikke å si at standarden Bibliotekene er den 36 00:01:36,370 --> 00:01:39,020 bare C-biblioteker, for det er mange flere der ute i 37 00:01:39,020 --> 00:01:42,460 verden for deg å bruke, inkludert CS50 Library, 38 00:01:42,460 --> 00:01:45,150 kartografi biblioteker med kryptering og dekryptering 39 00:01:45,150 --> 00:01:48,000 funksjoner, biblioteker med funksjoner for å kode og 40 00:01:48,000 --> 00:01:50,970 spille av video, og så videre. 41 00:01:50,970 --> 00:01:53,190 >> Dette bringer oss til et viktig side. 42 00:01:53,190 --> 00:01:55,500 En av de grunnleggende ferdighetene til prosjektering er å kjenne 43 00:01:55,500 --> 00:01:58,090 verktøy tilgjengelig i verktøykassen, slik at du kan bruke 44 00:01:58,090 --> 00:01:59,850 dem og unngå å finne opp hjulet med mindre 45 00:01:59,850 --> 00:02:01,510 du må gjøre det. 46 00:02:01,510 --> 00:02:04,120 Som programmerere, bibliotekene er en av de viktigste 47 00:02:04,120 --> 00:02:05,520 verktøyene vi har. 48 00:02:05,520 --> 00:02:08,520 Når du finner deg selv overfor en oppgave som virker kjedelig eller 49 00:02:08,520 --> 00:02:11,940 vanlig, som å finne lengden på en C streng, du 50 00:02:11,940 --> 00:02:14,020 bør spørre deg selv om det kan være tilfelle at 51 00:02:14,020 --> 00:02:16,520 noen er allerede gjort det samme før. 52 00:02:16,520 --> 00:02:17,760 Sjansen er at du kan finne noen 53 00:02:17,760 --> 00:02:20,110 hjelp i et bibliotek. 54 00:02:20,110 --> 00:02:23,260 >> Så i tekniske termer, er et bibliotek en binær fil som 55 00:02:23,260 --> 00:02:26,210 har blitt produsert ved å koble sammen en samling av 56 00:02:26,210 --> 00:02:28,880 objekt-filer ved hjelp av et verktøy kalt, du 57 00:02:28,880 --> 00:02:31,010 gjettet det, linker. 58 00:02:31,010 --> 00:02:33,830 Objekt-filer er de. O-filer som du får når du 59 00:02:33,830 --> 00:02:35,860 kompilere C kildekoden. 60 00:02:35,860 --> 00:02:38,420 Når programmerere skrive bibliotekene, typisk de 61 00:02:38,420 --> 00:02:41,560 skille deres C-kode i to typer filer: 62 00:02:41,560 --> 00:02:44,880 header filer og implementering filer. 63 00:02:44,880 --> 00:02:49,820 En header fil ved konvensjonen er gitt. H filtypen, 64 00:02:49,820 --> 00:02:51,940 og den inneholder kode som erklærer bibliotekets 65 00:02:51,940 --> 00:02:55,120 ressurser som er tilgjengelige for deg å bruke. 66 00:02:55,120 --> 00:02:58,830 Disse ressursene inkluderer funksjoner, variabler, structs, 67 00:02:58,830 --> 00:03:01,980 typedefinisjoner, og så videre, og sammen, er de 68 00:03:01,980 --> 00:03:04,620 ofte referert til som grensesnitt. 69 00:03:04,620 --> 00:03:07,280 Faktisk, hvis du noen gang lurer på hva som er i et bibliotek, 70 00:03:07,280 --> 00:03:09,580 header-filene er stedet å lete. 71 00:03:09,580 --> 00:03:14,030 >> For eksempel kan du trekke opp usr / include / stdio.h og sjekk 72 00:03:14,030 --> 00:03:16,210 ut alt gang du ønsket å vite om 73 00:03:16,210 --> 00:03:18,570 standard io biblioteket. 74 00:03:18,570 --> 00:03:20,610 Det er en masse ting her, og det kan ta litt av 75 00:03:20,610 --> 00:03:22,420 tid til å vasse gjennom. 76 00:03:22,420 --> 00:03:25,840 Men sammen med Google og manpages, er dette 77 00:03:25,840 --> 00:03:28,060 sted å gå hvis du lurer på hvordan standard I / O 78 00:03:28,060 --> 00:03:30,460 bibliotekfunksjoner arbeid. 79 00:03:30,460 --> 00:03:33,910 Så en viktig ting å merke seg her, skjønt, er at header filer 80 00:03:33,910 --> 00:03:36,740 vanligvis ikke inkluderer funksjonsdefinisjoner - 81 00:03:36,740 --> 00:03:40,020 det vil si den faktiske funksjon implementeringer. 82 00:03:40,020 --> 00:03:42,470 Dette er en illustrasjon av en viktig informatikk 83 00:03:42,470 --> 00:03:45,700 prinsipp kalt informasjon skjule, også referert til på 84 00:03:45,700 --> 00:03:48,960 ganger så innkapsling. 85 00:03:48,960 --> 00:03:52,630 >> Som brukeren eller kunden av et bibliotek, trenger du ikke å 86 00:03:52,630 --> 00:03:54,230 vet om det innvendige av biblioteket i 87 00:03:54,230 --> 00:03:55,380 For å bruke den. 88 00:03:55,380 --> 00:03:57,800 Husk å se printf bare litt siden? 89 00:03:57,800 --> 00:04:00,275 Hadde du noen gang sett selve koden før? 90 00:04:00,275 --> 00:04:02,535 Vel, jeg antar at du ikke har, selv om du kanskje 91 00:04:02,535 --> 00:04:05,090 har brukt printf tonnevis av ganger. 92 00:04:05,090 --> 00:04:08,110 Alt du måtte vite var funksjonen erklæringen stede 93 00:04:08,110 --> 00:04:10,940 i stdio.h header-fil. 94 00:04:10,940 --> 00:04:14,010 Uansett, er fordelen med god informasjon hiding at du 95 00:04:14,010 --> 00:04:16,820 og programmene du skriver er isolert fra eventuelle endringer i 96 00:04:16,820 --> 00:04:20,209 koden for gjennomføringen av biblioteket funksjoner. 97 00:04:20,209 --> 00:04:22,880 Dersom gjennomføringen av printf endringer, trenger du ikke ha 98 00:04:22,880 --> 00:04:26,310 å gå inn og endre alle dine programmer som bruker printf. 99 00:04:26,310 --> 00:04:28,450 >> Så hvor går gjennomføringen? 100 00:04:28,450 --> 00:04:31,020 Vel, igjen, etter konvensjonen, går gjennomføringen i en 101 00:04:31,020 --> 00:04:34,310 filen med. c filtypen. 102 00:04:34,310 --> 00:04:36,820 Vanligvis header filer og implementering filer går hånd 103 00:04:36,820 --> 00:04:39,380 i hånden, så hvis du har erklært en haug med ny streng 104 00:04:39,380 --> 00:04:42,950 funksjoner i mystring.h, så vil du definere alle 105 00:04:42,950 --> 00:04:46,960 disse funksjonene i myString. c.. 106 00:04:46,960 --> 00:04:49,230 Så da header og gjennomføring filer er så 107 00:04:49,230 --> 00:04:52,230 kompilert, lage objekt-filer som deretter koblet 108 00:04:52,230 --> 00:04:55,360 sammen for å produsere den binære bibliotekfilen. 109 00:04:55,360 --> 00:04:58,520 Biblioteket forfatter vil deretter sende den binære filen sammen 110 00:04:58,520 --> 00:05:00,720 med header-filer til programmerere som ønsker å bruke 111 00:05:00,720 --> 00:05:02,280 biblioteket. 112 00:05:02,280 --> 00:05:04,640 På dette punktet, de. C implementering filene er ikke 113 00:05:04,640 --> 00:05:07,840 nødvendig, bortsett fra å rekompilere biblioteket fra bunnen av, så 114 00:05:07,840 --> 00:05:10,270 de er ofte utelatt. 115 00:05:10,270 --> 00:05:13,670 >> Å bruke C-biblioteket, må du gjøre to ting. 116 00:05:13,670 --> 00:05:16,890 Først må du # include bibliotekets header filer og 117 00:05:16,890 --> 00:05:18,700 kildekoden filen der du ønsker å bruke 118 00:05:18,700 --> 00:05:20,530 koden til biblioteket. 119 00:05:20,530 --> 00:05:23,200 Dette forteller kompilatoren av alle uttalelser fra 120 00:05:23,200 --> 00:05:26,890 funksjoner, variabler, structs, et cetera, er til stede i 121 00:05:26,890 --> 00:05:30,510 header-filer slik at kompilatoren kan man, sørge for at 122 00:05:30,510 --> 00:05:33,280 du bruker bibliotekets ressurser på riktig måte, 123 00:05:33,280 --> 00:05:37,120 og to, generere den riktige montering koden. 124 00:05:37,120 --> 00:05:38,910 Avhengig av hvor bibliotekets header filer er 125 00:05:38,910 --> 00:05:42,720 plassert, varierer # include syntaks. 126 00:05:42,720 --> 00:05:44,880 Hvis header filene ligger i systemets 127 00:05:44,880 --> 00:05:46,690 standard inkluderer katalog - 128 00:05:46,690 --> 00:05:48,780 typisk, usr/include-- 129 00:05:48,780 --> 00:05:52,200 deretter vinkelbena syntaksen brukes, som i # include 130 00:05:52,200 --> 00:05:53,450 . 131 00:05:57,440 --> 00:05:59,540 Men hvis header filene ligger i samme 132 00:05:59,540 --> 00:06:02,960 katalog som din egen kode, er det dobbelt anførselstegn syntaks 133 00:06:02,960 --> 00:06:04,870 brukes, som i # include "mylib.h". 134 00:06:08,630 --> 00:06:11,220 >> Den andre tingen du trenger å gjøre er å koble i det binære 135 00:06:11,220 --> 00:06:13,760 bibliotekfil når du kompilere koden din. 136 00:06:13,760 --> 00:06:15,810 Dette er en super viktig skritt. 137 00:06:15,810 --> 00:06:17,540 Husk vår tidligere diskusjon om hvordan header 138 00:06:17,540 --> 00:06:20,200 filene inneholder ikke implementeringen koden? 139 00:06:20,200 --> 00:06:22,200 Hvis du glemmer dette trinnet, vil du få feil om 140 00:06:22,200 --> 00:06:24,990 udefinerte symboler referert i koden din. 141 00:06:24,990 --> 00:06:29,580 For å løse dette ved å bruke-l flagget fulgte umiddelbart 142 00:06:29,580 --> 00:06:32,320 uten en plass ved navnet på biblioteket. 143 00:06:32,320 --> 00:06:35,410 På mange systemer, inkludert apparatet, C Standard 144 00:06:35,410 --> 00:06:38,350 Bibliotekene blir automatisk koblet til deg. 145 00:06:38,350 --> 00:06:41,700 Imidlertid er regnestykket bibliotek ofte være knyttet separat 146 00:06:41,700 --> 00:06:44,600 og må kanskje ha sammenheng med-lm. 147 00:06:44,600 --> 00:06:47,760 På apparatet, tar vi vare på dette for deg, og vi har også 148 00:06:47,760 --> 00:06:52,170 knytte CS50 biblioteket med-lcs50. 149 00:06:52,170 --> 00:06:54,540 Du kan se alt dette på apparatet når du kjører gjør. 150 00:06:57,620 --> 00:06:59,130 >> Nå bør du ha den kunnskapen du trenger for å bruke 151 00:06:59,130 --> 00:07:02,150 bibliotekene i C. Ha det gøy å utforske. 152 00:07:02,150 --> 00:07:05,880 Mitt navn er Nate Hardison, og dette er CS50.