1 00:00:06,692 --> 00:00:09,470 [Powered by Google Translate] NATE Hardison: I programmering, er et bibliotek en samling af 2 00:00:09,470 --> 00:00:11,380 relaterede foruddefineret kode. 3 00:00:11,380 --> 00:00:14,350 Biblioteker er, hvordan vi som programmører, deler fælles og 4 00:00:14,350 --> 00:00:16,930 hjælpsomme kode med hinanden, med de forskellige programmer, vi 5 00:00:16,930 --> 00:00:19,470 skrive, og selv med de forskellige processer kører på 6 00:00:19,470 --> 00:00:21,380 samme tid på vores computere. 7 00:00:21,380 --> 00:00:23,000 >> Lad os udforske en smule. 8 00:00:23,000 --> 00:00:25,070 En af de mere almindelige funktioner, som du har sikkert 9 00:00:25,070 --> 00:00:27,500 brugt er den printf funktion. 10 00:00:27,500 --> 00:00:29,820 Nu printf er ikke noget magisk funktion, som har været 11 00:00:29,820 --> 00:00:31,670 kodet ind i computeren - 12 00:00:31,670 --> 00:00:34,320 snarere, det er en del af C Standard Biblioteker, der er 13 00:00:34,320 --> 00:00:36,080 en samling af funktioner, der kommer med 14 00:00:36,080 --> 00:00:38,050 C programmeringssprog. 15 00:00:38,050 --> 00:00:40,920 Da printf ikke er indbygget i computeren, betyder det, at 16 00:00:40,920 --> 00:00:43,520 der var nogle programmør, der rent faktisk gik ind og skrev det 17 00:00:43,520 --> 00:00:46,310 printf funktion og bundtet det med resten af ​​standarden 18 00:00:46,310 --> 00:00:48,880 biblioteker således at fremtidige programmører ikke ville have til 19 00:00:48,880 --> 00:00:50,310 duplikere indsatsen. 20 00:00:50,310 --> 00:00:52,620 Og vi er sikker taknemmelige for, at det er tilfældet, fordi tjek 21 00:00:52,620 --> 00:00:54,710 ud af, hvor meget kode det faktisk tager at gennemføre printf. 22 00:00:59,590 --> 00:01:02,860 >> De C Standard Biblioteker, hvoraf printf er en del, er 23 00:01:02,860 --> 00:01:04,480 en af ​​de vigtigste værktøjer, du 24 00:01:04,480 --> 00:01:06,770 har i forbindelse med bekæmpelse CS50. 25 00:01:06,770 --> 00:01:08,780 Ud over den input-output bibliotek, hvor 26 00:01:08,780 --> 00:01:11,370 printf liv, er der en masse andre biblioteker, 27 00:01:11,370 --> 00:01:14,230 du skal nok bruge i løbet af CS50. 28 00:01:14,230 --> 00:01:16,730 For eksempel har strengen biblioteket funktioner 29 00:01:16,730 --> 00:01:20,960 sammenligne C strenge, få deres længde, og sammenkæde dem. 30 00:01:20,960 --> 00:01:22,410 Og math biblioteket giver dig nyttige 31 00:01:22,410 --> 00:01:25,062 konstanter, som pi og e. 32 00:01:25,062 --> 00:01:27,650 Nu, i forhold til standard biblioteker af anden programmering 33 00:01:27,650 --> 00:01:31,190 sprog, er C Standard Biblioteker er virkelig små, 34 00:01:31,190 --> 00:01:34,060 men de har stadig en betydelig mængde af ting. 35 00:01:34,060 --> 00:01:36,370 Og det er ikke til at sige, at standarden Biblioteker er den 36 00:01:36,370 --> 00:01:39,020 kun C-biblioteker og der er mange flere derude i 37 00:01:39,020 --> 00:01:42,460 verden for dig at bruge, herunder CS50 Bibliotek, 38 00:01:42,460 --> 00:01:45,150 kartografi biblioteker med kryptering og dekryptering 39 00:01:45,150 --> 00:01:48,000 funktioner, biblioteker med funktioner til at indkode og 40 00:01:48,000 --> 00:01:50,970 afspille video og så videre. 41 00:01:50,970 --> 00:01:53,190 >> Dette bringer os til en vigtig side. 42 00:01:53,190 --> 00:01:55,500 En af de væsentlige færdigheder for teknik er at vide det 43 00:01:55,500 --> 00:01:58,090 værktøjer til rådighed i din værktøjskasse, så du kan bruge 44 00:01:58,090 --> 00:01:59,850 dem og undgå at genopfinde hjulet, medmindre 45 00:01:59,850 --> 00:02:01,510 du er nødt til at gøre det. 46 00:02:01,510 --> 00:02:04,120 Som programmører, er biblioteker en af ​​de vigtigste 47 00:02:04,120 --> 00:02:05,520 redskaber, vi har. 48 00:02:05,520 --> 00:02:08,520 Når du finder dig selv over for en opgave, der synes kedelig eller 49 00:02:08,520 --> 00:02:11,940 almindelig, som at finde længden af ​​en C-streng, du 50 00:02:11,940 --> 00:02:14,020 bør spørge dig selv, om det kunne være tilfældet, at 51 00:02:14,020 --> 00:02:16,520 nogen har allerede gjort det samme før. 52 00:02:16,520 --> 00:02:17,760 Chancerne er, at du kunne finde nogle 53 00:02:17,760 --> 00:02:20,110 hjælp inden for et bibliotek. 54 00:02:20,110 --> 00:02:23,260 >> Så teknisk set er et bibliotek en binær fil, 55 00:02:23,260 --> 00:02:26,210 er fremstillet ved at kombinere en samling af 56 00:02:26,210 --> 00:02:28,880 objekt filer ved hjælp af et værktøj kaldet, du 57 00:02:28,880 --> 00:02:31,010 gættet det, linkeren. 58 00:02:31,010 --> 00:02:33,830 Objekt-filer er dem. O filer, du får, når du 59 00:02:33,830 --> 00:02:35,860 kompilere C kildekode. 60 00:02:35,860 --> 00:02:38,420 Når programmører skriver biblioteker, de typisk 61 00:02:38,420 --> 00:02:41,560 adskille deres C-kode i to typer af filer: 62 00:02:41,560 --> 00:02:44,880 header-filer og gennemførelse filer. 63 00:02:44,880 --> 00:02:49,820 Et hovedstød fil ved konvention får. H. filtypenavn, 64 00:02:49,820 --> 00:02:51,940 og den indeholder kode, der erklærer bibliotekets 65 00:02:51,940 --> 00:02:55,120 ressourcer, der er til rådighed for dig at bruge. 66 00:02:55,120 --> 00:02:58,830 Disse ressourcer omfatter funktioner, variabler, structs, 67 00:02:58,830 --> 00:03:01,980 type definitioner, og så videre, og sammen er de 68 00:03:01,980 --> 00:03:04,620 almindeligvis kaldet grænsefladen. 69 00:03:04,620 --> 00:03:07,280 I virkeligheden, hvis du er nogensinde spekulerer på, hvad der er i et bibliotek, 70 00:03:07,280 --> 00:03:09,580 header-filer er det rette sted at kigge. 71 00:03:09,580 --> 00:03:14,030 >> For eksempel kan du trække op usr / include / stdio.h og tjek 72 00:03:14,030 --> 00:03:16,210 alt, hvad du nogensinde ønsket at vide om 73 00:03:16,210 --> 00:03:18,570 standard io biblioteket. 74 00:03:18,570 --> 00:03:20,610 Der er en masse ting herinde, og det kan tage en smule af 75 00:03:20,610 --> 00:03:22,420 tid at vade igennem. 76 00:03:22,420 --> 00:03:25,840 Men sammen med Google og de manpages, er dette den 77 00:03:25,840 --> 00:03:28,060 sted at gå Hvis du undrer dig over, hvordan standard I / O 78 00:03:28,060 --> 00:03:30,460 biblioteksfunktioner arbejde. 79 00:03:30,460 --> 00:03:33,910 Så en vigtig ting at bemærke her, er dog, at header-filer 80 00:03:33,910 --> 00:03:36,740 typisk ikke omfatter funktionsdefinitioner - 81 00:03:36,740 --> 00:03:40,020 det vil sige, den aktuelle funktion implementeringer. 82 00:03:40,020 --> 00:03:42,470 Dette er en illustration af en vigtig datalogi 83 00:03:42,470 --> 00:03:45,700 Princippet kaldes information skjul, også nævnt i 84 00:03:45,700 --> 00:03:48,960 gange så indkapsling. 85 00:03:48,960 --> 00:03:52,630 >> Når brugeren eller kunden af ​​et bibliotek, behøver du ikke at 86 00:03:52,630 --> 00:03:54,230 kender den interne af biblioteket i 87 00:03:54,230 --> 00:03:55,380 For at kunne bruge det. 88 00:03:55,380 --> 00:03:57,800 Husk at se printf bare en smule siden? 89 00:03:57,800 --> 00:04:00,275 Havde du nogensinde set den konkrete kode før? 90 00:04:00,275 --> 00:04:02,535 Nå, jeg formoder, at du ikke har, selvom du måske 91 00:04:02,535 --> 00:04:05,090 har brugt printf tons gange. 92 00:04:05,090 --> 00:04:08,110 Alt du havde at vide var funktionserklæringen til stede 93 00:04:08,110 --> 00:04:10,940 i stdio.h header fil. 94 00:04:10,940 --> 00:04:14,010 Anyway, til gavn for god information skjule er, at du 95 00:04:14,010 --> 00:04:16,820 og de programmer, du skriver er isoleret fra eventuelle ændringer i 96 00:04:16,820 --> 00:04:20,209 koden for gennemførelse af bibliotekets funktioner. 97 00:04:20,209 --> 00:04:22,880 Hvis gennemførelsen af ​​printf ændringer, behøver du ikke 98 00:04:22,880 --> 00:04:26,310 at gå og ændre alle dine programmer, der bruger printf. 99 00:04:26,310 --> 00:04:28,450 >> Så hvor kommer implementering hen? 100 00:04:28,450 --> 00:04:31,020 Nå, igen efter sædvane går gennemførelse i en 101 00:04:31,020 --> 00:04:34,310 fil med den. c. filtypenavnet. 102 00:04:34,310 --> 00:04:36,820 Normalt header-filer og gennemførelse filer går hånd 103 00:04:36,820 --> 00:04:39,380 i hånd, hvis så du har erklæret en masse ny streng 104 00:04:39,380 --> 00:04:42,950 funktioner i mystring.h, så vil du definere alle 105 00:04:42,950 --> 00:04:46,960 disse funktioner i mystring. ca. 106 00:04:46,960 --> 00:04:49,230 Så header og implementering filer er så 107 00:04:49,230 --> 00:04:52,230 udarbejdet, skaber objekt filer, der derefter forbundet 108 00:04:52,230 --> 00:04:55,360 sammen til frembringelse af den binære biblioteksfilen. 109 00:04:55,360 --> 00:04:58,520 Biblioteket forfatter vil derefter sende den binære fil ad 110 00:04:58,520 --> 00:05:00,720 med header filer til programmører, der ønsker at bruge 111 00:05:00,720 --> 00:05:02,280 biblioteket. 112 00:05:02,280 --> 00:05:04,640 På dette tidspunkt er de. C Gennemførelse filer ikke 113 00:05:04,640 --> 00:05:07,840 behov, bortset fra at genkompilere biblioteket fra bunden, så 114 00:05:07,840 --> 00:05:10,270 de er ofte udeladt. 115 00:05:10,270 --> 00:05:13,670 >> For at bruge C-bibliotek, du er nødt til at gøre to ting. 116 00:05:13,670 --> 00:05:16,890 Først skal du # include bibliotekets header-filer og de 117 00:05:16,890 --> 00:05:18,700 kildekode fil, hvor du ønsker at bruge 118 00:05:18,700 --> 00:05:20,530 bibliotekets kode. 119 00:05:20,530 --> 00:05:23,200 Dette informerer compiler af alle erklæringer om 120 00:05:23,200 --> 00:05:26,890 funktioner, variable structs, et cetera, til stede i 121 00:05:26,890 --> 00:05:30,510 header-filer, så compileren kan man, sikre, at 122 00:05:30,510 --> 00:05:33,280 du bruger bibliotekets ressourcer på den rigtige måde, 123 00:05:33,280 --> 00:05:37,120 og to, genererer den relevante samling kode. 124 00:05:37,120 --> 00:05:38,910 Afhængig af hvor bibliotekets header-filer er 125 00:05:38,910 --> 00:05:42,720 placeret, # include syntaksen varierer. 126 00:05:42,720 --> 00:05:44,880 Hvis header filer er placeret i systemets 127 00:05:44,880 --> 00:05:46,690 standard omfatter bibliotek - 128 00:05:46,690 --> 00:05:48,780 typisk, usr/include-- 129 00:05:48,780 --> 00:05:52,200 så vinklen parentes syntaks anvendes, som i # include 130 00:05:52,200 --> 00:05:53,450 . 131 00:05:57,440 --> 00:05:59,540 Hvis header filerne er placeret i samme 132 00:05:59,540 --> 00:06:02,960 bibliotek som din egen kode, er det dobbelt citat syntaks 133 00:06:02,960 --> 00:06:04,870 anvendes, som i # include "mylib.h". 134 00:06:08,630 --> 00:06:11,220 >> Den anden ting du skal gøre er at linke i den binære 135 00:06:11,220 --> 00:06:13,760 biblioteksfil når du kompilerer din kode. 136 00:06:13,760 --> 00:06:15,810 Det er et super vigtigt skridt. 137 00:06:15,810 --> 00:06:17,540 Husk vores tidligere diskussion om, hvordan header 138 00:06:17,540 --> 00:06:20,200 filer ikke indeholder gennemførelse kode? 139 00:06:20,200 --> 00:06:22,200 Hvis du glemmer dette trin, får du fejl omkring 140 00:06:22,200 --> 00:06:24,990 udefinerede symboler der refereres til i din kode. 141 00:06:24,990 --> 00:06:29,580 For at løse dette, skal du bruge-l flaget efterfulgt umiddelbart 142 00:06:29,580 --> 00:06:32,320 uden mellemrum ved navn biblioteket. 143 00:06:32,320 --> 00:06:35,410 På mange systemer, herunder apparatet, C Standard 144 00:06:35,410 --> 00:06:38,350 Biblioteker sammenkædes automatisk for dig. 145 00:06:38,350 --> 00:06:41,700 Imidlertid er math biblioteket undertiden bundtet separat 146 00:06:41,700 --> 00:06:44,600 og muligvis kædes sammen med-lm. 147 00:06:44,600 --> 00:06:47,760 På apparatet, tager vi os af det for dig, og vi har også 148 00:06:47,760 --> 00:06:52,170 forbinde CS50 bibliotek med-lcs50. 149 00:06:52,170 --> 00:06:54,540 Du kan se alt dette på apparatet, når du kører lave. 150 00:06:57,620 --> 00:06:59,130 >> Nu skulle du have den viden, du skal bruge 151 00:06:59,130 --> 00:07:02,150 biblioteker i C. er sjovt at opleve. 152 00:07:02,150 --> 00:07:05,880 Mit navn er Nate Hardison, og dette er CS50.