1 00:00:06,692 --> 00:00:09,470 [Powered by Google Translate] NATE哈迪森:在編程中,圖書館是一個集 2 00:00:09,470 --> 00:00:11,380 相關預先寫好的代碼。 3 00:00:11,380 --> 00:00:14,350 圖書館是如何,我們作為程序員,有著共同的和 4 00:00:14,350 --> 00:00:16,930 有用的代碼,與不同的節目中,我們相互 5 00:00:16,930 --> 00:00:19,470 寫,甚至運行在不同的進程 6 00:00:19,470 --> 00:00:21,380 同時在我​​們的電腦上。 7 00:00:21,380 --> 00:00:23,000 >> 讓我們探討一下。 8 00:00:23,000 --> 00:00:25,070 其中比較常見的功能,你可能 9 00:00:25,070 --> 00:00:27,500 一直使用的是printf函數。 10 00:00:27,500 --> 00:00:29,820 現在,printf是不是有些神奇的功能, 11 00:00:29,820 --> 00:00:31,670 硬編碼到計算機 - 12 00:00:31,670 --> 00:00:34,320 相反,它是C標準庫的一部分,這是 13 00:00:34,320 --> 00:00:36,080 附帶的功能的集合 14 00:00:36,080 --> 00:00:38,050 C編程語言。 15 00:00:38,050 --> 00:00:40,920 由於printf是內置於計算機中,這意味著, 16 00:00:40,920 --> 00:00:43,520 有一些程序員究竟是誰走了進去,並寫下了 17 00:00:43,520 --> 00:00:46,310 printf函數和捆綁它與其餘的標準 18 00:00:46,310 --> 00:00:48,880 庫,從而使未來的程序員不會有 19 00:00:48,880 --> 00:00:50,310 重複的努力。 20 00:00:50,310 --> 00:00:52,620 我們相信感激,這樣的話,因為檢查 21 00:00:52,620 --> 00:00:54,710 出它實際上需要多少代碼來實現輸出。 22 00:00:59,590 --> 00:01:02,860 >> C標準庫,其中printf是一個部分, 23 00:01:02,860 --> 00:01:04,480 最重要的工具之一,你 24 00:01:04,480 --> 00:01:06,770 在解決CS50。 25 00:01:06,770 --> 00:01:08,780 除了輸入輸出庫其中 26 00:01:08,780 --> 00:01:11,370 printf的生活,還有一堆其他圖書館, 27 00:01:11,370 --> 00:01:14,230 你可能會使用的CS50的過程。 28 00:01:14,230 --> 00:01:16,730 例如,字符串庫的功能, 29 00:01:16,730 --> 00:01:20,960 比較C字符串,其長度,然後將它們連接起來。 30 00:01:20,960 --> 00:01:22,410 和數學庫為您提供幫助 31 00:01:22,410 --> 00:01:25,062 常量,如pi和e。 32 00:01:25,062 --> 00:01:27,650 現在,相比其他編程標準庫 33 00:01:27,650 --> 00:01:31,190 語言,C標準庫是非常小的, 34 00:01:31,190 --> 00:01:34,060 但他們仍然有一個重要的東西。 35 00:01:34,060 --> 00:01:36,370 這並不是說,標準庫是 36 00:01:36,370 --> 00:01:39,020 C庫,也有許多在那裡的 37 00:01:39,020 --> 00:01:42,460 供您使用,包括CS50圖書館的世界, 38 00:01:42,460 --> 00:01:45,150 製圖庫加密和解密 39 00:01:45,150 --> 00:01:48,000 函數,庫函數進行編碼和 40 00:01:48,000 --> 00:01:50,970 回放視頻,等等。 41 00:01:50,970 --> 00:01:53,190 >> 這給我們帶來了一個重要的一邊。 42 00:01:53,190 --> 00:01:55,500 工程的基本技能之一是知道的 43 00:01:55,500 --> 00:01:58,090 在你的工具箱中的工具,使您可以使用 44 00:01:58,090 --> 00:01:59,850 他們和避免重新發明輪子,除非 45 00:01:59,850 --> 00:02:01,510 你必須這樣做。 46 00:02:01,510 --> 00:02:04,120 作為程序員,庫是一個最重要的 47 00:02:04,120 --> 00:02:05,520 我們的工具。 48 00:02:05,520 --> 00:02:08,520 當你發現自己面臨著一個任務,這似乎單調乏味或 49 00:02:08,520 --> 00:02:11,940 司空見慣,就像找到一個C字符串的長度, 50 00:02:11,940 --> 00:02:14,020 應該問自己,如果可能的情況下, 51 00:02:14,020 --> 00:02:16,520 已經有人做了同樣的事情之前。 52 00:02:16,520 --> 00:02:17,760 有機會,你可以找到一些 53 00:02:17,760 --> 00:02:20,110 幫助在圖書館。 54 00:02:20,110 --> 00:02:23,260 >> 因此,在技術方面,圖書館是一個二進制文件, 55 00:02:23,260 --> 00:02:26,210 已產生的連接在一起的集合 56 00:02:26,210 --> 00:02:28,880 使用工具的目標文件調用,你 57 00:02:28,880 --> 00:02:31,010 猜對了,連接器。 58 00:02:31,010 --> 00:02:33,830 目標文件是o文件,你當你 59 00:02:33,830 --> 00:02:35,860 編譯C源代碼。 60 00:02:35,860 --> 00:02:38,420 當程序員編寫的庫,他們通常 61 00:02:38,420 --> 00:02:41,560 他們的C代碼分離成兩種類型的文件: 62 00:02:41,560 --> 00:02:44,880 頭文件和實現文件。 63 00:02:44,880 --> 00:02:49,820 按照慣例,一個頭文件。h文件擴展名, 64 00:02:49,820 --> 00:02:51,940 它包含的代碼,聲明該庫的 65 00:02:51,940 --> 00:02:55,120 資源供您使用。 66 00:02:55,120 --> 00:02:58,830 這些資源包括函數,變量,結構, 67 00:02:58,830 --> 00:03:01,980 類型定義,以及等等,並在一起,它們是 68 00:03:01,980 --> 00:03:04,620 通常稱為作為接口。 69 00:03:04,620 --> 00:03:07,280 事實上,如果你曾經想知道什麼是在圖書館, 70 00:03:07,280 --> 00:03:09,580 頭文件的地方去尋找。 71 00:03:09,580 --> 00:03:14,030 >> 例如,你可以拉起來USR /包括/ stdio.h和檢查 72 00:03:14,030 --> 00:03:16,210 一切你曾經想知道 73 00:03:16,210 --> 00:03:18,570 標準IO庫。 74 00:03:18,570 --> 00:03:20,610 有很多東西在這裡,它可以採取一些 75 00:03:20,610 --> 00:03:22,420 涉水通過。 76 00:03:22,420 --> 00:03:25,840 然而,隨著谷歌和聯機幫助頁,這是 77 00:03:25,840 --> 00:03:28,060 地方去,如果你想知道如何使用標準I / O 78 00:03:28,060 --> 00:03:30,460 庫函數的工作。 79 00:03:30,460 --> 00:03:33,910 因此,這裡要注意的一個關鍵的事情,不過,就是這個頭文件 80 00:03:33,910 --> 00:03:36,740 通常不包括函數定義 - 81 00:03:36,740 --> 00:03:40,020 也就是說,實際的功能實現。 82 00:03:40,020 --> 00:03:42,470 這是一個重要的計算機科學的圖示 83 00:03:42,470 --> 00:03:45,700 原則叫做信息隱藏,也被稱為在 84 00:03:45,700 --> 00:03:48,960 倍封裝。 85 00:03:48,960 --> 00:03:52,630 >> 由於用戶或客戶端的一個庫,則不需要 86 00:03:52,630 --> 00:03:54,230 了解庫中的內部 87 00:03:54,230 --> 00:03:55,380 為了使用它。 88 00:03:55,380 --> 00:03:57,800 還記得看到輸出只是有點? 89 00:03:57,800 --> 00:04:00,275 如果你實際的代碼之前見過嗎? 90 00:04:00,275 --> 00:04:02,535 嗯,我認為即使你沒有,你可能 91 00:04:02,535 --> 00:04:05,090 用的printf噸的次數。 92 00:04:05,090 --> 00:04:08,110 你必須知道的是函數的聲明存在 93 00:04:08,110 --> 00:04:10,940 在stdio.h頭文件。 94 00:04:10,940 --> 00:04:14,010 總之,良好的信息隱藏的利益是你 95 00:04:14,010 --> 00:04:16,820 你寫的程序是絕緣的任何變化 96 00:04:16,820 --> 00:04:20,209 的庫函數的實現代碼。 97 00:04:20,209 --> 00:04:22,880 如果執行的printf的變化,你不必 98 00:04:22,880 --> 00:04:26,310 去改變所有你的程序中使用printf。 99 00:04:26,310 --> 00:04:28,450 >> 那麼,實施去了? 100 00:04:28,450 --> 00:04:31,020 好了,再次,按照慣例,實施“在 101 00:04:31,020 --> 00:04:34,310 。c文件擴展名的文件。 102 00:04:34,310 --> 00:04:36,820 通常情況下,頭文件和實現文件齊頭並進 103 00:04:36,820 --> 00:04:39,380 在手,所以,如果你已經聲明了一堆新的字符串 104 00:04:39,380 --> 00:04:42,950 在mystring.h的功能,然後你可以定義所有的 105 00:04:42,950 --> 00:04:46,960 這些功能在mystring。 106 00:04:46,960 --> 00:04:49,230 那麼接下來的頭文件和實現文件,然後 107 00:04:49,230 --> 00:04:52,230 編譯,創建目標文件,然後鏈接 108 00:04:52,230 --> 00:04:55,360 在一起,產生的二進制庫文件。 109 00:04:55,360 --> 00:04:58,520 庫編寫者將附帶的二進制文件,以及 110 00:04:58,520 --> 00:05:00,720 程序員誰想要使用的頭文件 111 00:05:00,720 --> 00:05:02,280 該庫。 112 00:05:02,280 --> 00:05:04,640 在這一點上,C語言實現文件 113 00:05:04,640 --> 00:05:07,840 需要,除了從頭開始,所以重新編譯該庫 114 00:05:07,840 --> 00:05:10,270 他們經常離開了。 115 00:05:10,270 --> 00:05:13,670 >> 要使用C庫,你必須做兩件事情。 116 00:05:13,670 --> 00:05:16,890 首先,你必須包括庫的頭文件和 117 00:05:16,890 --> 00:05:18,700 你想使用源代碼文件 118 00:05:18,700 --> 00:05:20,530 庫中的代碼。 119 00:05:20,530 --> 00:05:23,200 這告訴編譯器,所有的聲明 120 00:05:23,200 --> 00:05:26,890 函數,變量,結構,等等,目前在 121 00:05:26,890 --> 00:05:30,510 頭文件,以便編譯器之一,確保 122 00:05:30,510 --> 00:05:33,280 您正在使用圖書館的資源以適當的方式, 123 00:05:33,280 --> 00:05:37,120 2,生成相應的彙編代碼。 124 00:05:37,120 --> 00:05:38,910 根據庫的頭文件 125 00:05:38,910 --> 00:05:42,720 位於的#include語法各不相同。 126 00:05:42,720 --> 00:05:44,880 如果頭文件位於系統的 127 00:05:44,880 --> 00:05:46,690 默認情況下包括目錄 - 128 00:05:46,690 --> 00:05:48,780 通常情況下,usr/include-- 129 00:05:48,780 --> 00:05:52,200 然後尖括號語法時,如在#include 130 00:05:52,200 --> 00:05:53,450 。 131 00:05:57,440 --> 00:05:59,540 然而,如果頭文件都位於相同的 132 00:05:59,540 --> 00:06:02,960 目錄作為自己的代碼,雙引號的語法是 133 00:06:02,960 --> 00:06:04,870 使用#“包括”mylib.h。 134 00:06:08,630 --> 00:06:11,220 >> 你所要做的第二件事是鏈接的二進制 135 00:06:11,220 --> 00:06:13,760 庫文件時,編譯你的代碼。 136 00:06:13,760 --> 00:06:15,810 這是一個超級的重要步驟。 137 00:06:15,810 --> 00:06:17,540 還記得我們前面的討論中,關於如何頭 138 00:06:17,540 --> 00:06:20,200 文件不包含實現代碼嗎? 139 00:06:20,200 --> 00:06:22,200 如果你忘了這一步,你會得到錯誤信息 140 00:06:22,200 --> 00:06:24,990 在你的代碼中未定義的符號引用。 141 00:06:24,990 --> 00:06:29,580 要解決此問題,請使用-l標誌,後面緊跟 142 00:06:29,580 --> 00:06:32,320 沒有空間的庫名稱。 143 00:06:32,320 --> 00:06:35,410 在許多系統,包括家電,C標準 144 00:06:35,410 --> 00:06:38,350 庫將自動為您聯繫。 145 00:06:38,350 --> 00:06:41,700 然而,有時被捆綁的數學庫分別 146 00:06:41,700 --> 00:06:44,600 可能需要鏈接時使用-lm。 147 00:06:44,600 --> 00:06:47,760 在設備上,我們為你照顧,我們也 148 00:06:47,760 --> 00:06:52,170 鏈接CS50圖書館,lcs50的。 149 00:06:52,170 --> 00:06:54,540 當你運行時,在設備上,你可以看到這一切。 150 00:06:57,620 --> 00:06:59,130 >> 現在你應該有你需要使用的知識 151 00:06:59,130 --> 00:07:02,150 C.庫中盡情探索。 152 00:07:02,150 --> 00:07:05,880 我的名字是Nate哈迪森,這是CS50。