1 00:00:06,692 --> 00:00:09,470 [Powered by Google Translate] NATE Hardison: Nella programmazione, una biblioteca è una raccolta di 2 00:00:09,470 --> 00:00:11,380 codice correlato prewritten. 3 00:00:11,380 --> 00:00:14,350 Le biblioteche sono come noi, come i programmatori, le azioni ordinarie e 4 00:00:14,350 --> 00:00:16,930 codice utile con l'altro, con i diversi programmi che 5 00:00:16,930 --> 00:00:19,470 scrivere, e anche con i diversi processi in esecuzione 6 00:00:19,470 --> 00:00:21,380 contemporaneamente sui nostri computer. 7 00:00:21,380 --> 00:00:23,000 >> Analizziamo un po '. 8 00:00:23,000 --> 00:00:25,070 Una delle funzioni più comuni che probabilmente avete 9 00:00:25,070 --> 00:00:27,500 usato è la funzione printf. 10 00:00:27,500 --> 00:00:29,820 Ora, printf non è una funzione magica che è stato 11 00:00:29,820 --> 00:00:31,670 hard-coded nel computer - 12 00:00:31,670 --> 00:00:34,320 piuttosto, è parte delle librerie standard di C, che sono 13 00:00:34,320 --> 00:00:36,080 un insieme di funzioni che viene fornito con il 14 00:00:36,080 --> 00:00:38,050 C linguaggio di programmazione. 15 00:00:38,050 --> 00:00:40,920 Poiché printf non è incorporato nel computer, ciò significa che 16 00:00:40,920 --> 00:00:43,520 ci fosse qualche programmatore che effettivamente è andato e ha scritto la 17 00:00:43,520 --> 00:00:46,310 funzione printf e bundle con il resto della norma 18 00:00:46,310 --> 00:00:48,880 librerie in modo che i futuri programmatori non avrebbe dovuto 19 00:00:48,880 --> 00:00:50,310 duplicare gli sforzi. 20 00:00:50,310 --> 00:00:52,620 E siamo sicuri grati che questo è il caso, perché controllare 21 00:00:52,620 --> 00:00:54,710 la quantità di codice necessario per implementare effettivamente printf. 22 00:00:59,590 --> 00:01:02,860 >> Le librerie standard di C, di cui una parte è printf, sono 23 00:01:02,860 --> 00:01:04,480 uno degli strumenti più importanti che 24 00:01:04,480 --> 00:01:06,770 hanno nella lotta CS50. 25 00:01:06,770 --> 00:01:08,780 Oltre al input-output biblioteca dove 26 00:01:08,780 --> 00:01:11,370 printf vita, ci sono un sacco di altre biblioteche che 27 00:01:11,370 --> 00:01:14,230 probabilmente utilizzare nel corso del CS50. 28 00:01:14,230 --> 00:01:16,730 Per esempio, la libreria ha funzioni di stringa 29 00:01:16,730 --> 00:01:20,960 confrontare le stringhe C, ottenere la loro lunghezza, e concatenare loro. 30 00:01:20,960 --> 00:01:22,410 E la libreria matematica ti dà utili 31 00:01:22,410 --> 00:01:25,062 costanti, come il pi greco ed e. 32 00:01:25,062 --> 00:01:27,650 Ora, rispetto alle librerie standard di programmazione altra 33 00:01:27,650 --> 00:01:31,190 lingue, le librerie standard C sono davvero piccole, 34 00:01:31,190 --> 00:01:34,060 ma hanno ancora una notevole quantità di roba. 35 00:01:34,060 --> 00:01:36,370 E questo non vuol dire che le librerie standard sono il 36 00:01:36,370 --> 00:01:39,020 C solo le librerie, ci sono molti altri là fuori nel 37 00:01:39,020 --> 00:01:42,460 mondo per l'uso, tra cui la Biblioteca CS50, 38 00:01:42,460 --> 00:01:45,150 biblioteche cartografia con crittografia e decrittografia 39 00:01:45,150 --> 00:01:48,000 funzioni, librerie con funzioni per codificare e 40 00:01:48,000 --> 00:01:50,970 riprodurre video, e così via. 41 00:01:50,970 --> 00:01:53,190 >> Questo ci porta ad una parte importante. 42 00:01:53,190 --> 00:01:55,500 Una delle competenze essenziali di ingegneria è conoscere la 43 00:01:55,500 --> 00:01:58,090 strumenti disponibili nella cassetta degli attrezzi in modo da poter utilizzare 44 00:01:58,090 --> 00:01:59,850 ed evitare di reinventare la ruota a meno che non 45 00:01:59,850 --> 00:02:01,510 quello che dovete fare così. 46 00:02:01,510 --> 00:02:04,120 Come i programmatori, le biblioteche sono uno dei più importanti 47 00:02:04,120 --> 00:02:05,520 strumenti che abbiamo. 48 00:02:05,520 --> 00:02:08,520 Quando ci si trova di fronte a un compito che sembra noioso o 49 00:02:08,520 --> 00:02:11,940 banale, come trovare la lunghezza di una stringa C, si 50 00:02:11,940 --> 00:02:14,020 dovrebbe chiedersi se potrebbe essere il caso che 51 00:02:14,020 --> 00:02:16,520 qualcuno ha già fatto la stessa cosa prima. 52 00:02:16,520 --> 00:02:17,760 Le probabilità sono che si potrebbe trovare un po ' 53 00:02:17,760 --> 00:02:20,110 aiuto all'interno di una libreria. 54 00:02:20,110 --> 00:02:23,260 >> Quindi, in termini tecnici, una biblioteca è un file binario che 55 00:02:23,260 --> 00:02:26,210 è stato prodotto mettendo in correlazione una raccolta di 56 00:02:26,210 --> 00:02:28,880 file oggetto usando uno strumento chiamato, è 57 00:02:28,880 --> 00:02:31,010 indovinato, il linker. 58 00:02:31,010 --> 00:02:33,830 I file oggetto sono quelli. File o che si ottiene quando si 59 00:02:33,830 --> 00:02:35,860 compilare il codice sorgente C. 60 00:02:35,860 --> 00:02:38,420 Quando i programmatori scrivere librerie, in genere 61 00:02:38,420 --> 00:02:41,560 separare il codice C in due tipi di file: 62 00:02:41,560 --> 00:02:44,880 file di intestazione e file di implementazione. 63 00:02:44,880 --> 00:02:49,820 Un file di intestazione per convenzione viene dato l'estensione di file. H, 64 00:02:49,820 --> 00:02:51,940 e contiene un codice che dichiari la biblioteca 65 00:02:51,940 --> 00:02:55,120 risorse che sono disponibili per l'uso. 66 00:02:55,120 --> 00:02:58,830 Queste risorse includono funzioni, variabili, strutture, 67 00:02:58,830 --> 00:03:01,980 definizioni di tipo, e così via, e insieme, sono 68 00:03:01,980 --> 00:03:04,620 comunemente indicato come l'interfaccia. 69 00:03:04,620 --> 00:03:07,280 In realtà, se si sta chiedendo che cosa è mai in una libreria, 70 00:03:07,280 --> 00:03:09,580 i file di intestazione sono il posto dove guardare. 71 00:03:09,580 --> 00:03:14,030 >> Ad esempio, è possibile tirare su usr / include / stdio.h e controllare 72 00:03:14,030 --> 00:03:16,210 tutto quello che avreste sempre voluto sapere sul 73 00:03:16,210 --> 00:03:18,570 la biblioteca io standard. 74 00:03:18,570 --> 00:03:20,610 C'è un sacco di roba qui dentro, e si può prendere un po 'di 75 00:03:20,610 --> 00:03:22,420 il tempo di guadare attraverso. 76 00:03:22,420 --> 00:03:25,840 Tuttavia, con Google e le pagine man, questo è il 77 00:03:25,840 --> 00:03:28,060 posto dove andare se vi state chiedendo come l'I / O standard 78 00:03:28,060 --> 00:03:30,460 funzioni di libreria lavoro. 79 00:03:30,460 --> 00:03:33,910 Quindi una cosa fondamentale da notare qui, però, è che i file header 80 00:03:33,910 --> 00:03:36,740 in genere non includono definizioni di funzione - 81 00:03:36,740 --> 00:03:40,020 cioè, le implementazioni delle funzioni effettive. 82 00:03:40,020 --> 00:03:42,470 Questo è un esempio di un importante informatica 83 00:03:42,470 --> 00:03:45,700 principio chiamato information hiding, anche di cui al punto 84 00:03:45,700 --> 00:03:48,960 volte più incapsulamento. 85 00:03:48,960 --> 00:03:52,630 >> Come l'utente o il cliente di una libreria, non c'è bisogno di 86 00:03:52,630 --> 00:03:54,230 conoscere la struttura interna della biblioteca in 87 00:03:54,230 --> 00:03:55,380 al fine di usarlo. 88 00:03:55,380 --> 00:03:57,800 Ricordo di aver visto printf solo un po 'fa? 89 00:03:57,800 --> 00:04:00,275 Avevi mai visto il codice vero e proprio prima? 90 00:04:00,275 --> 00:04:02,535 Beh, suppongo che tu non hai, anche se si potrebbe 91 00:04:02,535 --> 00:04:05,090 hanno usato printf tonnellate di volte. 92 00:04:05,090 --> 00:04:08,110 Tutto quello che doveva sapere era il presente dichiarazione di funzione 93 00:04:08,110 --> 00:04:10,940 nel file di intestazione stdio.h. 94 00:04:10,940 --> 00:04:14,010 In ogni caso, il beneficio di information hiding buona è che si 95 00:04:14,010 --> 00:04:16,820 ei programmi che scrivi sono isolati dalla variazione di 96 00:04:16,820 --> 00:04:20,209 il codice per l'esecuzione di funzioni di libreria. 97 00:04:20,209 --> 00:04:22,880 Se la realizzazione di modifiche printf, non si dispone di 98 00:04:22,880 --> 00:04:26,310 di andare a cambiare tutti i programmi che utilizzano printf. 99 00:04:26,310 --> 00:04:28,450 >> Allora, dove si va di attuazione? 100 00:04:28,450 --> 00:04:31,020 Bene, ancora una volta, per convenzione, l'attuazione va in una 101 00:04:31,020 --> 00:04:34,310 file con l'estensione di file. c. 102 00:04:34,310 --> 00:04:36,820 Di solito, i file header e file di implementazione vanno di pari 103 00:04:36,820 --> 00:04:39,380 in mano, quindi se hai dichiarato un gruppo di nuova stringa 104 00:04:39,380 --> 00:04:42,950 funzioni in mystring.h, allora si dovrà definire tutti 105 00:04:42,950 --> 00:04:46,960 tali funzioni in MyString. c. 106 00:04:46,960 --> 00:04:49,230 Allora i file di intestazione e l'attuazione sono quindi 107 00:04:49,230 --> 00:04:52,230 compilato, la creazione di file oggetto che vengono poi collegati 108 00:04:52,230 --> 00:04:55,360 insieme per produrre il file di libreria binario. 109 00:04:55,360 --> 00:04:58,520 Lo scrittore biblioteca poi spedire il file binario lungo 110 00:04:58,520 --> 00:05:00,720 con i file di intestazione per i programmatori che desiderano utilizzare 111 00:05:00,720 --> 00:05:02,280 la biblioteca. 112 00:05:02,280 --> 00:05:04,640 A questo punto, i file di implementazione. C non sono 113 00:05:04,640 --> 00:05:07,840 necessario, tranne la ricompilazione della libreria da zero, in modo da 114 00:05:07,840 --> 00:05:10,270 sono spesso lasciati fuori. 115 00:05:10,270 --> 00:05:13,670 >> Per utilizzare la libreria C, è necessario fare due cose. 116 00:05:13,670 --> 00:05:16,890 In primo luogo, è necessario # include file di intestazione della biblioteca e dei 117 00:05:16,890 --> 00:05:18,700 file di codice sorgente in cui si desidera utilizzare 118 00:05:18,700 --> 00:05:20,530 della biblioteca del codice. 119 00:05:20,530 --> 00:05:23,200 Questo informa il compilatore di tutte le dichiarazioni di 120 00:05:23,200 --> 00:05:26,890 funzioni, variabili, strutture, eccetera, presenti nel 121 00:05:26,890 --> 00:05:30,510 file di intestazione in modo che il compilatore si può, assicurare che 122 00:05:30,510 --> 00:05:33,280 si sta utilizzando le risorse della biblioteca in modo corretto, 123 00:05:33,280 --> 00:05:37,120 e due, generare il relativo codice assembly. 124 00:05:37,120 --> 00:05:38,910 A seconda di dove i file di intestazione della biblioteca sono 125 00:05:38,910 --> 00:05:42,720 trova, la sintassi # include varia. 126 00:05:42,720 --> 00:05:44,880 Se i file di intestazione si trovano nella di sistema 127 00:05:44,880 --> 00:05:46,690 predefinita directory include - 128 00:05:46,690 --> 00:05:48,780 tipicamente, usr/include-- 129 00:05:48,780 --> 00:05:52,200 quindi la sintassi angolo parentesi viene utilizzato, come in # include 130 00:05:52,200 --> 00:05:53,450 . 131 00:05:57,440 --> 00:05:59,540 Tuttavia, se i file di intestazione si trovano nella stessa 132 00:05:59,540 --> 00:06:02,960 directory come il proprio codice, la sintassi è doppio apice 133 00:06:02,960 --> 00:06:04,870 usato, come in # include "mylib.h". 134 00:06:08,630 --> 00:06:11,220 >> La seconda cosa che dovete fare è collegare il binario 135 00:06:11,220 --> 00:06:13,760 libreria di file quando si compila il codice. 136 00:06:13,760 --> 00:06:15,810 Questo è un passo super importante. 137 00:06:15,810 --> 00:06:17,540 Ricordate la nostra precedente discussione su come intestazione 138 00:06:17,540 --> 00:06:20,200 file non contengono codice di implementazione? 139 00:06:20,200 --> 00:06:22,200 Se si dimentica questo passaggio, otterrete errori su 140 00:06:22,200 --> 00:06:24,990 i simboli non definiti riferimento nel codice. 141 00:06:24,990 --> 00:06:29,580 Per risolvere questo problema, utilizzare l'opzione-l seguita immediatamente 142 00:06:29,580 --> 00:06:32,320 senza uno spazio dal nome della libreria. 143 00:06:32,320 --> 00:06:35,410 Su molti sistemi, tra cui l 'apparecchio, lo Standard C 144 00:06:35,410 --> 00:06:38,350 Le biblioteche sono automaticamente collegati per voi. 145 00:06:38,350 --> 00:06:41,700 Tuttavia, la libreria matematica a volte è fornito separatamente 146 00:06:41,700 --> 00:06:44,600 e potrebbe aver bisogno di essere collegato con-lm. 147 00:06:44,600 --> 00:06:47,760 Su questo apparecchio, si prenderà cura di questo per voi, e abbiamo anche 148 00:06:47,760 --> 00:06:52,170 linkare la libreria-CS50 con lcs50. 149 00:06:52,170 --> 00:06:54,540 Potete vedere tutto questo sull'apparecchio quando si esegue fare. 150 00:06:57,620 --> 00:06:59,130 >> Ora si dovrebbe avere le conoscenze necessarie per utilizzare 151 00:06:59,130 --> 00:07:02,150 librerie in C. Buon divertimento esplorare. 152 00:07:02,150 --> 00:07:05,880 Il mio nome è Nate Hardison, e questo è CS50.