1 00:00:06,692 --> 00:00:09,470 [Powered by Google Translate] NATE HARDISON:プログラミングでは、ライブラリーのコレクションです 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 それが実際にprintfを実装するのにかかるどのくらいのコードが出。 22 00:00:59,590 --> 00:01:02,860 >> printfの部分であるC標準ライブラリは、アール 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 πと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 あなたが見つけたときに自分で面倒or思われる課題に直面して 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 の2種類のファイルに自分の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 / includeはstdio.hをプルアップし、チェックすることができます 72 00:03:14,030 --> 00:03:16,210 すべてアウトあなたは今までについて知りたいと思った 73 00:03:16,210 --> 00:03:18,570 標準入出力ライブラリ。 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 ただし、Googleおよびマンページと一緒に、これは 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 ほんの少し前にprintfを見て覚えていますか? 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にそれらの関数ますc。 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 ヘッダファイルには、コンパイラは、1保証できなくなるということ 122 00:05:30,510 --> 00:05:33,280 あなたは、適切な方法で図書館の資料を使っている 123 00:05:33,280 --> 00:05:37,120 二、適切なアセンブリコードを生成します。 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 -lcs50とCS50ライブラリをリンクします。 149 00:06:52,170 --> 00:06:54,540 あなたは、makeを実行するアプライアンスでこのすべてを見ることができます。 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 私の名前はネイトHardisonであり、これはCS50です。