1 00:00:06,692 --> 00:00:09,470 [Powered by Google Translate] NATE Hardison: I programmering är ett bibliotek en samling av 2 00:00:09,470 --> 00:00:11,380 relaterade färdigskriven kod. 3 00:00:11,380 --> 00:00:14,350 Biblioteken är hur vi som programmerare, dela gemensamma och 4 00:00:14,350 --> 00:00:16,930 hjälp kod med varandra, med de olika program vi 5 00:00:16,930 --> 00:00:19,470 skriva, och även med de olika processer som körs på 6 00:00:19,470 --> 00:00:21,380 Samtidigt på våra datorer. 7 00:00:21,380 --> 00:00:23,000 >> Låt oss undersöka lite. 8 00:00:23,000 --> 00:00:25,070 En av de vanligaste funktioner som du har förmodligen 9 00:00:25,070 --> 00:00:27,500 använt är printf funktionen. 10 00:00:27,500 --> 00:00:29,820 Nu printf är inte någon magisk funktion som har varit 11 00:00:29,820 --> 00:00:31,670 hårdkodade i datorn - 12 00:00:31,670 --> 00:00:34,320 snarare är det en del av C-standard bibliotek som är 13 00:00:34,320 --> 00:00:36,080 en samling av funktioner som kommer med 14 00:00:36,080 --> 00:00:38,050 C programmeringsspråk. 15 00:00:38,050 --> 00:00:40,920 Eftersom printf inte är inbyggt i datorn innebär att 16 00:00:40,920 --> 00:00:43,520 det fanns någon programmerare som faktiskt gick in och skrev 17 00:00:43,520 --> 00:00:46,310 printf funktion och kombinerade den med resten av standarden 18 00:00:46,310 --> 00:00:48,880 bibliotek så att framtida programmerare inte skulle behöva 19 00:00:48,880 --> 00:00:50,310 duplicera ansträngningen. 20 00:00:50,310 --> 00:00:52,620 Och vi är säkra på tacksamma att så är fallet, eftersom kontrollera 21 00:00:52,620 --> 00:00:54,710 hur mycket kod det faktiskt tar att genomföra printf. 22 00:00:59,590 --> 00:01:02,860 >> C-Standard bibliotek, av vilka printf är en del, är 23 00:01:02,860 --> 00:01:04,480 en av de viktigaste verktyg du 24 00:01:04,480 --> 00:01:06,770 har att ta itu med CS50. 25 00:01:06,770 --> 00:01:08,780 Förutom input-output bibliotek där 26 00:01:08,780 --> 00:01:11,370 printf liv, finns det en massa andra bibliotek som 27 00:01:11,370 --> 00:01:14,230 du kommer förmodligen att använda under loppet av CS50. 28 00:01:14,230 --> 00:01:16,730 Till exempel har strängen biblioteket funktioner 29 00:01:16,730 --> 00:01:20,960 jämföra C strängar, få deras längd, och sammanfoga dem. 30 00:01:20,960 --> 00:01:22,410 Och matte biblioteket ger hjälp 31 00:01:22,410 --> 00:01:25,062 konstanter, som pi och e. 32 00:01:25,062 --> 00:01:27,650 Nu, jämfört med de vanliga bibliotek av andra program 33 00:01:27,650 --> 00:01:31,190 språk, C-standard biblioteken är verkligen små, 34 00:01:31,190 --> 00:01:34,060 men de har fortfarande en betydande mängd saker. 35 00:01:34,060 --> 00:01:36,370 Och det är inte att säga att de standardbibliotek är 36 00:01:36,370 --> 00:01:39,020 bara C-bibliotek, det finns många fler ute i 37 00:01:39,020 --> 00:01:42,460 värld som du kan använda, inklusive CS50 biblioteket 38 00:01:42,460 --> 00:01:45,150 kartografi bibliotek med kryptering och dekryptering 39 00:01:45,150 --> 00:01:48,000 funktioner, bibliotek med funktioner för att koda och 40 00:01:48,000 --> 00:01:50,970 spela upp video, och så vidare. 41 00:01:50,970 --> 00:01:53,190 >> Det leder oss till en viktig undan. 42 00:01:53,190 --> 00:01:55,500 En av de viktigaste färdigheter teknik är att veta 43 00:01:55,500 --> 00:01:58,090 verktyg som finns i din verktygslåda så att du kan använda 44 00:01:58,090 --> 00:01:59,850 dem och undvika att återuppfinna hjulet inte 45 00:01:59,850 --> 00:02:01,510 du måste göra det. 46 00:02:01,510 --> 00:02:04,120 Som programmerare, bibliotek är en av de viktigaste 47 00:02:04,120 --> 00:02:05,520 verktyg vi har. 48 00:02:05,520 --> 00:02:08,520 När du befinner dig inför en uppgift som verkar tråkiga eller 49 00:02:08,520 --> 00:02:11,940 vanligt, som att hitta längden av en C-sträng, du 50 00:02:11,940 --> 00:02:14,020 bör fråga dig själv om det kan vara så att 51 00:02:14,020 --> 00:02:16,520 någon har redan gjort samma sak innan. 52 00:02:16,520 --> 00:02:17,760 Chansen är stor att du kan hitta några 53 00:02:17,760 --> 00:02:20,110 hjälp inom ett bibliotek. 54 00:02:20,110 --> 00:02:23,260 >> Så i tekniska termer, är ett bibliotek en binär fil som 55 00:02:23,260 --> 00:02:26,210 har producerats genom att koppla ihop en samling av 56 00:02:26,210 --> 00:02:28,880 objektfiler med ett verktyg som heter, du 57 00:02:28,880 --> 00:02:31,010 gissat det, linkern. 58 00:02:31,010 --> 00:02:33,830 Objektfiler är de. O-filer som du får när du 59 00:02:33,830 --> 00:02:35,860 kompilera C källkod. 60 00:02:35,860 --> 00:02:38,420 När programmerare skriver bibliotek, vanligtvis de 61 00:02:38,420 --> 00:02:41,560 skilja sina C-kod i två typer av filer: 62 00:02:41,560 --> 00:02:44,880 header-filer och filer genomförande. 63 00:02:44,880 --> 00:02:49,820 Ett sidhuvud fil genom konventionen ges. H. filändelsen, 64 00:02:49,820 --> 00:02:51,940 och det innehåller kod som förklarar bibliotekets 65 00:02:51,940 --> 00:02:55,120 resurser som finns tillgängliga för dig att använda. 66 00:02:55,120 --> 00:02:58,830 Dessa resurser inkluderar funktioner, variabler, structs, 67 00:02:58,830 --> 00:03:01,980 typdefinitioner, och så vidare, och tillsammans, är de 68 00:03:01,980 --> 00:03:04,620 vanligen kallad gränssnittet. 69 00:03:04,620 --> 00:03:07,280 Faktum är att om du någonsin undrar vad som finns i ett bibliotek, 70 00:03:07,280 --> 00:03:09,580 de header-filer är platsen att leta. 71 00:03:09,580 --> 00:03:14,030 >> Till exempel kan du dra upp usr / include / stdio.h och kontrollera 72 00:03:14,030 --> 00:03:16,210 ut allt du någonsin velat veta om 73 00:03:16,210 --> 00:03:18,570 standard io biblioteket. 74 00:03:18,570 --> 00:03:20,610 Det finns en massa saker här, och det kan ta lite 75 00:03:20,610 --> 00:03:22,420 tid att ta sig igenom. 76 00:03:22,420 --> 00:03:25,840 Men tillsammans med Google och manualsidor är detta 77 00:03:25,840 --> 00:03:28,060 plats att gå om du undrar hur standard-I / O 78 00:03:28,060 --> 00:03:30,460 biblioteksfunktioner fungerar. 79 00:03:30,460 --> 00:03:33,910 Så en viktig sak att notera här är dock att header-filer 80 00:03:33,910 --> 00:03:36,740 vanligtvis ingår inte funktionsdefinitioner - 81 00:03:36,740 --> 00:03:40,020 det är, den faktiska funktionen implementeringar. 82 00:03:40,020 --> 00:03:42,470 Detta är en illustration av en viktig datavetenskap 83 00:03:42,470 --> 00:03:45,700 princip som kallas information hiding, även kallat på 84 00:03:45,700 --> 00:03:48,960 gånger som inkapsling. 85 00:03:48,960 --> 00:03:52,630 >> När användaren eller kunden av ett bibliotek behöver du inte 86 00:03:52,630 --> 00:03:54,230 veta om interna i biblioteket i 87 00:03:54,230 --> 00:03:55,380 För att kunna använda den. 88 00:03:55,380 --> 00:03:57,800 Kom ihåg att se printf bara lite sen? 89 00:03:57,800 --> 00:04:00,275 Hade du någonsin sett den faktiska koden innan? 90 00:04:00,275 --> 00:04:02,535 Tja, jag antar att du inte har, även om du kanske 91 00:04:02,535 --> 00:04:05,090 har använt printf massor av gånger. 92 00:04:05,090 --> 00:04:08,110 Allt du måste veta var funktionen deklarationen närvarande 93 00:04:08,110 --> 00:04:10,940 i stdio.h filhuvudet. 94 00:04:10,940 --> 00:04:14,010 Hur som helst, är fördelen med bra information gömmer du 95 00:04:14,010 --> 00:04:16,820 och de program du skriver är isolerade från förändringar i 96 00:04:16,820 --> 00:04:20,209 koden för genomförande av bibliotekets funktioner. 97 00:04:20,209 --> 00:04:22,880 Om genomförandet av printf förändringar, behöver du inte 98 00:04:22,880 --> 00:04:26,310 att gå och ändra alla dina program som använder printf. 99 00:04:26,310 --> 00:04:28,450 >> Så var går genomförande? 100 00:04:28,450 --> 00:04:31,020 Nåväl, återigen, enligt praxis, går att genomföra i en 101 00:04:31,020 --> 00:04:34,310 fil med. c. filändelsen. 102 00:04:34,310 --> 00:04:36,820 Vanligtvis header-filer och filer genomförande går hand 103 00:04:36,820 --> 00:04:39,380 i handen, så om du har deklarerat ett gäng ny sträng 104 00:04:39,380 --> 00:04:42,950 funktioner i mystring.h, då du kommer att definiera alla 105 00:04:42,950 --> 00:04:46,960 dessa funktioner i MyString. c.. 106 00:04:46,960 --> 00:04:49,230 Så då rubriken och genomförande filer sedan 107 00:04:49,230 --> 00:04:52,230 sammanställs, skapa objektfiler som sedan är länkade 108 00:04:52,230 --> 00:04:55,360 tillsammans för att skapa filen binära biblioteket. 109 00:04:55,360 --> 00:04:58,520 Biblioteket författare kommer då skicka binär fil längs 110 00:04:58,520 --> 00:05:00,720 med header-filer till programmerare som vill använda 111 00:05:00,720 --> 00:05:02,280 biblioteket. 112 00:05:02,280 --> 00:05:04,640 Vid denna punkt,. C genomförandet filer är inte 113 00:05:04,640 --> 00:05:07,840 behövs, förutom att kompilera biblioteket från början, så 114 00:05:07,840 --> 00:05:10,270 de är ofta utelämnas. 115 00:05:10,270 --> 00:05:13,670 >> Om du vill använda C-biblioteket, måste du göra två saker. 116 00:05:13,670 --> 00:05:16,890 Först måste du inkludera # bibliotekets header-filer och 117 00:05:16,890 --> 00:05:18,700 källkod fil där du vill använda 118 00:05:18,700 --> 00:05:20,530 bibliotekets kod. 119 00:05:20,530 --> 00:05:23,200 Detta informerar kompilatorn av alla deklarationer 120 00:05:23,200 --> 00:05:26,890 funktioner, variabler, structs, et cetera, som finns i 121 00:05:26,890 --> 00:05:30,510 header-filer så att kompilatorn kan en, försäkra att 122 00:05:30,510 --> 00:05:33,280 du använder bibliotekets resurser på rätt sätt, 123 00:05:33,280 --> 00:05:37,120 och två, generera lämplig assemblerkod. 124 00:05:37,120 --> 00:05:38,910 Beroende på var bibliotekets header-filer är 125 00:05:38,910 --> 00:05:42,720 belägen varierar # include syntax. 126 00:05:42,720 --> 00:05:44,880 Om header-filer finns i systemets 127 00:05:44,880 --> 00:05:46,690 standard include-katalog - 128 00:05:46,690 --> 00:05:48,780 typiskt, usr/include-- 129 00:05:48,780 --> 00:05:52,200 då vinkeln konsoler syntaxen används, såsom i # include 130 00:05:52,200 --> 00:05:53,450 . 131 00:05:57,440 --> 00:05:59,540 Men om header-filer finns i samma 132 00:05:59,540 --> 00:06:02,960 katalog som din egen kod, är den dubbla citat syntaxen 133 00:06:02,960 --> 00:06:04,870 används, som i # include "mylib.h". 134 00:06:08,630 --> 00:06:11,220 >> Det andra du behöver göra är att koppla in den binära 135 00:06:11,220 --> 00:06:13,760 biblioteksfil när du bygger din kod. 136 00:06:13,760 --> 00:06:15,810 Detta är en super viktigt steg. 137 00:06:15,810 --> 00:06:17,540 Kom ihåg vår tidigare diskussion om hur header 138 00:06:17,540 --> 00:06:20,200 filer inte innehåller genomförandet kod? 139 00:06:20,200 --> 00:06:22,200 Om du glömmer det här steget får du fel om 140 00:06:22,200 --> 00:06:24,990 odefinierade symboler som nämns i din kod. 141 00:06:24,990 --> 00:06:29,580 För att lösa detta, använd-l flaggan följde omedelbart 142 00:06:29,580 --> 00:06:32,320 utan ett utrymme av namnet på biblioteket. 143 00:06:32,320 --> 00:06:35,410 På många system, inklusive apparaten, C Standard 144 00:06:35,410 --> 00:06:38,350 Bibliotek länkas automatiskt åt dig. 145 00:06:38,350 --> 00:06:41,700 Dock matte biblioteket ibland medföljande separat 146 00:06:41,700 --> 00:06:44,600 och kan behöva kopplas till-LM. 147 00:06:44,600 --> 00:06:47,760 På apparaten, tar vi hand om det åt dig, och vi 148 00:06:47,760 --> 00:06:52,170 länka CS50 biblioteket med-lcs50. 149 00:06:52,170 --> 00:06:54,540 Du kan se allt detta på apparaten när du kör göra. 150 00:06:57,620 --> 00:06:59,130 >> Nu bör du ha den kunskap du behöver för att använda 151 00:06:59,130 --> 00:07:02,150 bibliotek i C. Ha kul att utforska. 152 00:07:02,150 --> 00:07:05,880 Mitt namn är Nate Hardison, och detta är CS50.