1 00:00:06,692 --> 00:00:09,470 [Powered by Google Translate] NATE Hardison: Bij het programmeren, een bibliotheek is een verzameling van 2 00:00:09,470 --> 00:00:11,380 gerelateerde vooraf geschreven code. 3 00:00:11,380 --> 00:00:14,350 Bibliotheken zijn hoe wij als programmeurs, hebben gemeenschappelijke en 4 00:00:14,350 --> 00:00:16,930 behulpzaam code met elkaar, met de verschillende programma's die we 5 00:00:16,930 --> 00:00:19,470 schrijven, en zelfs met de verschillende processen draait op 6 00:00:19,470 --> 00:00:21,380 dezelfde tijd op onze computers. 7 00:00:21,380 --> 00:00:23,000 >> Laten we eens onderzoeken een beetje. 8 00:00:23,000 --> 00:00:25,070 Een van de meest voorkomende functies die u hebt waarschijnlijk 9 00:00:25,070 --> 00:00:27,500 zijn met behulp van de printf functie. 10 00:00:27,500 --> 00:00:29,820 Nu, printf is niet een magische functie die is geweest 11 00:00:29,820 --> 00:00:31,670 vast gecodeerd in de computer - 12 00:00:31,670 --> 00:00:34,320 Integendeel, het is een deel van de C Standaard bibliotheken, die 13 00:00:34,320 --> 00:00:36,080 een verzameling van functies die bij de 14 00:00:36,080 --> 00:00:38,050 C programmeertaal. 15 00:00:38,050 --> 00:00:40,920 Omdat printf is niet ingebouwd in de computer, dat betekent dat 16 00:00:40,920 --> 00:00:43,520 was er een programmeur die daadwerkelijk ging naar binnen en schreef de 17 00:00:43,520 --> 00:00:46,310 printf functie en gebundeld met de rest van de standaard 18 00:00:46,310 --> 00:00:48,880 bibliotheken zodat toekomstige programmeurs zou niet te 19 00:00:48,880 --> 00:00:50,310 dupliceren de inspanning. 20 00:00:50,310 --> 00:00:52,620 En we zijn er zeker van dankbaar dat dat het geval is, want controleren 21 00:00:52,620 --> 00:00:54,710 hoeveel code het eigenlijk nodig is om printf implementeren. 22 00:00:59,590 --> 00:01:02,860 >> De C Standard bibliotheken, waarvan printf deel uitmaakt, zijn 23 00:01:02,860 --> 00:01:04,480 een van de belangrijkste tools die u 24 00:01:04,480 --> 00:01:06,770 hebben in de aanpak van CS50. 25 00:01:06,770 --> 00:01:08,780 Naast de input-output bibliotheek waar 26 00:01:08,780 --> 00:01:11,370 printf leven, zijn er een heleboel andere bibliotheken die 27 00:01:11,370 --> 00:01:14,230 zul je waarschijnlijk gebruik maken van in de loop van CS50. 28 00:01:14,230 --> 00:01:16,730 Bijvoorbeeld, de string bibliotheek functies 29 00:01:16,730 --> 00:01:20,960 Vergelijk C strings, krijgen hun lengte, en elkaar plakken. 30 00:01:20,960 --> 00:01:22,410 En de wiskunde bibliotheek biedt u behulpzaam 31 00:01:22,410 --> 00:01:25,062 constanten, zoals pi en e. 32 00:01:25,062 --> 00:01:27,650 Nu vergeleken met de standaard bibliotheken van andere programmering 33 00:01:27,650 --> 00:01:31,190 talen, de C Standaard bibliotheken zijn erg klein, 34 00:01:31,190 --> 00:01:34,060 maar ze hebben nog steeds een aanzienlijke hoeveelheid spullen. 35 00:01:34,060 --> 00:01:36,370 En dat is niet om te zeggen dat de standaard bibliotheken zijn de 36 00:01:36,370 --> 00:01:39,020 alleen C bibliotheken, er zijn veel meer die er zijn in de 37 00:01:39,020 --> 00:01:42,460 wereld voor u te gebruiken, met inbegrip van de CS50 Bibliotheek, 38 00:01:42,460 --> 00:01:45,150 cartografie bibliotheken met encryptie en decryptie 39 00:01:45,150 --> 00:01:48,000 functies, bibliotheken met functies voor het coderen en 40 00:01:48,000 --> 00:01:50,970 afspelen video, enzovoort. 41 00:01:50,970 --> 00:01:53,190 >> Dit brengt ons bij een belangrijke opzij. 42 00:01:53,190 --> 00:01:55,500 Een van de essentiële vaardigheden van engineering is het kennen van de 43 00:01:55,500 --> 00:01:58,090 tools beschikbaar in uw gereedschapskist, zodat u kunt gebruik maken van 44 00:01:58,090 --> 00:01:59,850 hen en te voorkomen dat het wiel opnieuw uitvinden, tenzij 45 00:01:59,850 --> 00:02:01,510 je moet om dit te doen. 46 00:02:01,510 --> 00:02:04,120 Zoals programmeurs bibliotheken zijn een van de belangrijkste 47 00:02:04,120 --> 00:02:05,520 instrumenten die we hebben. 48 00:02:05,520 --> 00:02:08,520 Als je merkt dat je geconfronteerd met een taak die lijkt vervelend of 49 00:02:08,520 --> 00:02:11,940 gebruikelijk, zoals het vinden van de lengte van een C string, je 50 00:02:11,940 --> 00:02:14,020 moeten afvragen of het misschien het geval kunnen zijn dat 51 00:02:14,020 --> 00:02:16,520 iemand al hetzelfde gedaan voor. 52 00:02:16,520 --> 00:02:17,760 De kans is groot dat je wel wat vinden 53 00:02:17,760 --> 00:02:20,110 helpen in een bibliotheek. 54 00:02:20,110 --> 00:02:23,260 >> Dus in technische termen, een bibliotheek is een binair bestand dat 55 00:02:23,260 --> 00:02:26,210 is geproduceerd door het koppelen van een verzameling 56 00:02:26,210 --> 00:02:28,880 object bestanden met behulp van een tool genaamd, kunt u 57 00:02:28,880 --> 00:02:31,010 raadt het al, de linker. 58 00:02:31,010 --> 00:02:33,830 Object bestanden zijn die. O bestanden die je krijgt als je 59 00:02:33,830 --> 00:02:35,860 compileren C-broncode. 60 00:02:35,860 --> 00:02:38,420 Als programmeurs bibliotheken schrijven, ze meestal 61 00:02:38,420 --> 00:02:41,560 scheiden van hun C-code in twee typen bestanden: 62 00:02:41,560 --> 00:02:44,880 header-bestanden en implementatie bestanden. 63 00:02:44,880 --> 00:02:49,820 Een header-bestand volgens afspraak krijgt de. H bestandsextensie, 64 00:02:49,820 --> 00:02:51,940 en het bevat code die de bibliotheek verklaart 65 00:02:51,940 --> 00:02:55,120 middelen die beschikbaar zijn voor u om te gebruiken. 66 00:02:55,120 --> 00:02:58,830 Deze middelen zijn onder functies, variabelen, structs, 67 00:02:58,830 --> 00:03:01,980 typedefinities, enzovoort, en samen zijn 68 00:03:01,980 --> 00:03:04,620 gewoonlijk aangeduid als de interface. 69 00:03:04,620 --> 00:03:07,280 In feite, als je ooit afvraagt ​​wat er in een bibliotheek, 70 00:03:07,280 --> 00:03:09,580 de header-bestanden zijn de plek om te kijken. 71 00:03:09,580 --> 00:03:14,030 >> Bijvoorbeeld, kunt u omhoog trekken usr / include / stdio.h en controleer 72 00:03:14,030 --> 00:03:16,210 alles wat je altijd al wilde weten over 73 00:03:16,210 --> 00:03:18,570 de standaard io bibliotheek. 74 00:03:18,570 --> 00:03:20,610 Er is een heleboel dingen hier, en het kan een beetje van 75 00:03:20,610 --> 00:03:22,420 tijd om te waden door. 76 00:03:22,420 --> 00:03:25,840 Echter, samen met Google en de manpages, is de 77 00:03:25,840 --> 00:03:28,060 Plaats om te gaan als je je afvraagt ​​hoe de standaard I / O 78 00:03:28,060 --> 00:03:30,460 bibliotheek functies werken. 79 00:03:30,460 --> 00:03:33,910 Dus een belangrijk ding om hier op te merken, is echter dat header bestanden 80 00:03:33,910 --> 00:03:36,740 meestal niet bevatten functiedefinities - 81 00:03:36,740 --> 00:03:40,020 dat wil zeggen de eigenlijke functie implementaties. 82 00:03:40,020 --> 00:03:42,470 Dit is een illustratie van een belangrijk informatica 83 00:03:42,470 --> 00:03:45,700 beginsel bijeengeroepen informatie verbergen, ook wel op 84 00:03:45,700 --> 00:03:48,960 maal inkapseling. 85 00:03:48,960 --> 00:03:52,630 >> Als de gebruiker of de klant van een bibliotheek, hoeft u niet te 86 00:03:52,630 --> 00:03:54,230 weten over de werking van de bibliotheek in 87 00:03:54,230 --> 00:03:55,380 om het te gebruiken. 88 00:03:55,380 --> 00:03:57,800 Vergeet niet het zien van printf gewoon een beetje geleden? 89 00:03:57,800 --> 00:04:00,275 Had je ooit de werkelijke code voor? 90 00:04:00,275 --> 00:04:02,535 Nou, ik neem aan dat je niet, ook al heb je misschien 91 00:04:02,535 --> 00:04:05,090 gebruikt printf ton keren. 92 00:04:05,090 --> 00:04:08,110 Alles wat je moest weten was de functie verklaring aanwezig 93 00:04:08,110 --> 00:04:10,940 in de stdio.h header bestand. 94 00:04:10,940 --> 00:04:14,010 Hoe dan ook, het voordeel van goede informatie verbergen, is dat je 95 00:04:14,010 --> 00:04:16,820 en de programma's die u schrijft zijn geïsoleerd van eventuele veranderingen in 96 00:04:16,820 --> 00:04:20,209 de code van de uitvoering van de bibliotheek functies. 97 00:04:20,209 --> 00:04:22,880 Indien de uitvoering van printf veranderingen, hoeft u niet 98 00:04:22,880 --> 00:04:26,310 om te gaan en te veranderen van al uw programma's die printf gebruiken. 99 00:04:26,310 --> 00:04:28,450 >> Dus waar komt de uitvoering gaan? 100 00:04:28,450 --> 00:04:31,020 Nou, nogmaals, volgens afspraak, de uitvoering gaat in een 101 00:04:31,020 --> 00:04:34,310 bestand met de. c bestandsextensie. 102 00:04:34,310 --> 00:04:36,820 Meestal header-bestanden en implementatie bestanden gaan hand 103 00:04:36,820 --> 00:04:39,380 in de hand, dus als je hebt verklaard een hoop nieuwe string 104 00:04:39,380 --> 00:04:42,950 functies in mystring.h, dan zul je vast al 105 00:04:42,950 --> 00:04:46,960 die functies in MyString. c. 106 00:04:46,960 --> 00:04:49,230 Dus dan is de header en de implementatie-bestanden zijn vervolgens 107 00:04:49,230 --> 00:04:52,230 samengesteld, het creëren van object bestanden die vervolgens worden gekoppeld 108 00:04:52,230 --> 00:04:55,360 samen om de binaire bibliotheek bestand te maken. 109 00:04:55,360 --> 00:04:58,520 De bibliotheek schrijver zal dan het schip de binaire bestand samen 110 00:04:58,520 --> 00:05:00,720 met de header-bestanden voor programmeurs die willen gebruiken 111 00:05:00,720 --> 00:05:02,280 de bibliotheek. 112 00:05:02,280 --> 00:05:04,640 Op dit punt, de. Uitvoering c bestanden niet 113 00:05:04,640 --> 00:05:07,840 nodig, behalve om de bibliotheek helemaal opnieuw compileren, zodat 114 00:05:07,840 --> 00:05:10,270 ze zijn vaak weggelaten. 115 00:05:10,270 --> 00:05:13,670 >> Om de C-bibliotheek te gebruiken, moet u twee dingen doen. 116 00:05:13,670 --> 00:05:16,890 Ten eerste moet je # include van de bibliotheek header-bestanden en de 117 00:05:16,890 --> 00:05:18,700 broncode bestand waar u wenst te gebruiken 118 00:05:18,700 --> 00:05:20,530 van de bibliotheek-code. 119 00:05:20,530 --> 00:05:23,200 Deze informeert de samensteller van alle van de verklaringen van 120 00:05:23,200 --> 00:05:26,890 functies, variabelen, structs, et cetera, aanwezig in het 121 00:05:26,890 --> 00:05:30,510 header bestanden, zodat de compiler kan men, verzekeren dat 122 00:05:30,510 --> 00:05:33,280 u gebruik maakt van de bibliotheek middelen op de juiste manier, 123 00:05:33,280 --> 00:05:37,120 en twee, het genereren van de juiste assembly code. 124 00:05:37,120 --> 00:05:38,910 Afhankelijk van waar de bibliotheek header-bestanden zijn 125 00:05:38,910 --> 00:05:42,720 gelegen, de # include syntax varieert. 126 00:05:42,720 --> 00:05:44,880 Als de header bevinden zich in het systeem 127 00:05:44,880 --> 00:05:46,690 Standaard zijn onder andere directory - 128 00:05:46,690 --> 00:05:48,780 typisch, usr/include-- 129 00:05:48,780 --> 00:05:52,200 dan de hoekbeugels syntax wordt gebruikt, zoals in # include 130 00:05:52,200 --> 00:05:53,450 . 131 00:05:57,440 --> 00:05:59,540 Indien echter de header bevinden zich in dezelfde 132 00:05:59,540 --> 00:06:02,960 directory als uw eigen code, de dubbele aanhalingstekens syntax is 133 00:06:02,960 --> 00:06:04,870 gebruikt, zoals in # include "mylib.h". 134 00:06:08,630 --> 00:06:11,220 >> Het tweede wat je hoeft te doen is een link in de binaire 135 00:06:11,220 --> 00:06:13,760 bibliotheekbestand wanneer u uw code te compileren. 136 00:06:13,760 --> 00:06:15,810 Dit is een belangrijke stap super. 137 00:06:15,810 --> 00:06:17,540 Vergeet niet onze eerdere discussie over hoe header 138 00:06:17,540 --> 00:06:20,200 bestanden bevatten geen implementatie code? 139 00:06:20,200 --> 00:06:22,200 Vergeet u deze stap, krijg je fouten over 140 00:06:22,200 --> 00:06:24,990 undefined symbolen verwezen in uw code. 141 00:06:24,990 --> 00:06:29,580 Om dit op te lossen, gebruik de-L vlag onmiddellijk gevolgd 142 00:06:29,580 --> 00:06:32,320 zonder ruimte door de naam van de bibliotheek. 143 00:06:32,320 --> 00:06:35,410 Voor veel systemen waaronder het apparaat, C Standard 144 00:06:35,410 --> 00:06:38,350 Bibliotheken automatisch gekoppeld voor u. 145 00:06:38,350 --> 00:06:41,700 Echter, de math library soms apart gebundeld 146 00:06:41,700 --> 00:06:44,600 en zou moeten worden gekoppeld aan-lm. 147 00:06:44,600 --> 00:06:47,760 Op het apparaat, verzorgen wij dit voor u, en we hebben ook 148 00:06:47,760 --> 00:06:52,170 verbinden de CS50 bibliotheek met-lcs50. 149 00:06:52,170 --> 00:06:54,540 U kunt dit allemaal op het apparaat wanneer u te maken. 150 00:06:57,620 --> 00:06:59,130 >> Nu moet je de kennis die je nodig hebt om te gebruiken 151 00:06:59,130 --> 00:07:02,150 bibliotheken in C. Veel plezier verkennen. 152 00:07:02,150 --> 00:07:05,880 Mijn naam is Nate Hardison, en dit is CS50.