[Powered by Google Translate] NATE Hardison: Bij het programmeren, een bibliotheek is een verzameling van gerelateerde vooraf geschreven code. Bibliotheken zijn hoe wij als programmeurs, hebben gemeenschappelijke en behulpzaam code met elkaar, met de verschillende programma's die we schrijven, en zelfs met de verschillende processen draait op dezelfde tijd op onze computers. Laten we eens onderzoeken een beetje. Een van de meest voorkomende functies die u hebt waarschijnlijk zijn met behulp van de printf functie. Nu, printf is niet een magische functie die is geweest vast gecodeerd in de computer - Integendeel, het is een deel van de C Standaard bibliotheken, die een verzameling van functies die bij de C programmeertaal. Omdat printf is niet ingebouwd in de computer, dat betekent dat was er een programmeur die daadwerkelijk ging naar binnen en schreef de printf functie en gebundeld met de rest van de standaard bibliotheken zodat toekomstige programmeurs zou niet te dupliceren de inspanning. En we zijn er zeker van dankbaar dat dat het geval is, want controleren hoeveel code het eigenlijk nodig is om printf implementeren. De C Standard bibliotheken, waarvan printf deel uitmaakt, zijn een van de belangrijkste tools die u hebben in de aanpak van CS50. Naast de input-output bibliotheek waar printf leven, zijn er een heleboel andere bibliotheken die zul je waarschijnlijk gebruik maken van in de loop van CS50. Bijvoorbeeld, de string bibliotheek functies Vergelijk C strings, krijgen hun lengte, en elkaar plakken. En de wiskunde bibliotheek biedt u behulpzaam constanten, zoals pi en e. Nu vergeleken met de standaard bibliotheken van andere programmering talen, de C Standaard bibliotheken zijn erg klein, maar ze hebben nog steeds een aanzienlijke hoeveelheid spullen. En dat is niet om te zeggen dat de standaard bibliotheken zijn de alleen C bibliotheken, er zijn veel meer die er zijn in de wereld voor u te gebruiken, met inbegrip van de CS50 Bibliotheek, cartografie bibliotheken met encryptie en decryptie functies, bibliotheken met functies voor het coderen en afspelen video, enzovoort. Dit brengt ons bij een belangrijke opzij. Een van de essentiële vaardigheden van engineering is het kennen van de tools beschikbaar in uw gereedschapskist, zodat u kunt gebruik maken van hen en te voorkomen dat het wiel opnieuw uitvinden, tenzij je moet om dit te doen. Zoals programmeurs bibliotheken zijn een van de belangrijkste instrumenten die we hebben. Als je merkt dat je geconfronteerd met een taak die lijkt vervelend of gebruikelijk, zoals het vinden van de lengte van een C string, je moeten afvragen of het misschien het geval kunnen zijn dat iemand al hetzelfde gedaan voor. De kans is groot dat je wel wat vinden helpen in een bibliotheek. Dus in technische termen, een bibliotheek is een binair bestand dat is geproduceerd door het koppelen van een verzameling object bestanden met behulp van een tool genaamd, kunt u raadt het al, de linker. Object bestanden zijn die. O bestanden die je krijgt als je compileren C-broncode. Als programmeurs bibliotheken schrijven, ze meestal scheiden van hun C-code in twee typen bestanden: header-bestanden en implementatie bestanden. Een header-bestand volgens afspraak krijgt de. H bestandsextensie, en het bevat code die de bibliotheek verklaart middelen die beschikbaar zijn voor u om te gebruiken. Deze middelen zijn onder functies, variabelen, structs, typedefinities, enzovoort, en samen zijn gewoonlijk aangeduid als de interface. In feite, als je ooit afvraagt ​​wat er in een bibliotheek, de header-bestanden zijn de plek om te kijken. Bijvoorbeeld, kunt u omhoog trekken usr / include / stdio.h en controleer alles wat je altijd al wilde weten over de standaard io bibliotheek. Er is een heleboel dingen hier, en het kan een beetje van tijd om te waden door. Echter, samen met Google en de manpages, is de Plaats om te gaan als je je afvraagt ​​hoe de standaard I / O bibliotheek functies werken. Dus een belangrijk ding om hier op te merken, is echter dat header bestanden meestal niet bevatten functiedefinities - dat wil zeggen de eigenlijke functie implementaties. Dit is een illustratie van een belangrijk informatica beginsel bijeengeroepen informatie verbergen, ook wel op maal inkapseling. Als de gebruiker of de klant van een bibliotheek, hoeft u niet te weten over de werking van de bibliotheek in om het te gebruiken. Vergeet niet het zien van printf gewoon een beetje geleden? Had je ooit de werkelijke code voor? Nou, ik neem aan dat je niet, ook al heb je misschien gebruikt printf ton keren. Alles wat je moest weten was de functie verklaring aanwezig in de stdio.h header bestand. Hoe dan ook, het voordeel van goede informatie verbergen, is dat je en de programma's die u schrijft zijn geïsoleerd van eventuele veranderingen in de code van de uitvoering van de bibliotheek functies. Indien de uitvoering van printf veranderingen, hoeft u niet om te gaan en te veranderen van al uw programma's die printf gebruiken. Dus waar komt de uitvoering gaan? Nou, nogmaals, volgens afspraak, de uitvoering gaat in een bestand met de. c bestandsextensie. Meestal header-bestanden en implementatie bestanden gaan hand in de hand, dus als je hebt verklaard een hoop nieuwe string functies in mystring.h, dan zul je vast al die functies in MyString. c. Dus dan is de header en de implementatie-bestanden zijn vervolgens samengesteld, het creëren van object bestanden die vervolgens worden gekoppeld samen om de binaire bibliotheek bestand te maken. De bibliotheek schrijver zal dan het schip de binaire bestand samen met de header-bestanden voor programmeurs die willen gebruiken de bibliotheek. Op dit punt, de. Uitvoering c bestanden niet nodig, behalve om de bibliotheek helemaal opnieuw compileren, zodat ze zijn vaak weggelaten. Om de C-bibliotheek te gebruiken, moet u twee dingen doen. Ten eerste moet je # include van de bibliotheek header-bestanden en de broncode bestand waar u wenst te gebruiken van de bibliotheek-code. Deze informeert de samensteller van alle van de verklaringen van functies, variabelen, structs, et cetera, aanwezig in het header bestanden, zodat de compiler kan men, verzekeren dat u gebruik maakt van de bibliotheek middelen op de juiste manier, en twee, het genereren van de juiste assembly code. Afhankelijk van waar de bibliotheek header-bestanden zijn gelegen, de # include syntax varieert. Als de header bevinden zich in het systeem Standaard zijn onder andere directory - typisch, usr/include-- dan de hoekbeugels syntax wordt gebruikt, zoals in # include . Indien echter de header bevinden zich in dezelfde directory als uw eigen code, de dubbele aanhalingstekens syntax is gebruikt, zoals in # include "mylib.h". Het tweede wat je hoeft te doen is een link in de binaire bibliotheekbestand wanneer u uw code te compileren. Dit is een belangrijke stap super. Vergeet niet onze eerdere discussie over hoe header bestanden bevatten geen implementatie code? Vergeet u deze stap, krijg je fouten over undefined symbolen verwezen in uw code. Om dit op te lossen, gebruik de-L vlag onmiddellijk gevolgd zonder ruimte door de naam van de bibliotheek. Voor veel systemen waaronder het apparaat, C Standard Bibliotheken automatisch gekoppeld voor u. Echter, de math library soms apart gebundeld en zou moeten worden gekoppeld aan-lm. Op het apparaat, verzorgen wij dit voor u, en we hebben ook verbinden de CS50 bibliotheek met-lcs50. U kunt dit allemaal op het apparaat wanneer u te maken. Nu moet je de kennis die je nodig hebt om te gebruiken bibliotheken in C. Veel plezier verkennen. Mijn naam is Nate Hardison, en dit is CS50.