[Powered by Google Translate] NATE HARDISON:プログラミングでは、ライブラリーのコレクションです 関連する作成済みのコード。 ライブラリは、共通のプログラマー、共有として、私たちはどのようにされ、 別のプログラムと相互に役立つコード、我々 書き込み、および偶数で実行している別のプロセスと 我々のコンピュータ上で同時に。 しばらく調べてみましょう。 あなたはおそらくしたことを、より一般的な機能の一つ 使用して、printf関数である。 さて、printf関数であっていくつかの魔法の機能ではありません コンピュータにハードコーディングされて - むしろ、それは、C標準ライブラリの一部だ が付属して関数のコレクション Cプログラミング言語。 printf関数は、コンピュータに組み込まれていないので、それがあることを意味 実際に行って、書いているいくつかのプログラマがあった printf関数と標準の残りの部分と、それを束ね 将来プログラマがする必要はありませんのでライブラリ 努力を複製します。 チェックされるため、我々は、そうだとしていること感謝している それが実際にprintfを実装するのにかかるどのくらいのコードが出。 printfの部分であるC標準ライブラリは、アール あなたの最も重要なツールの一つ CS50に取り組んでいます。 入出力ライブラリに加えて、どこに printfの生活は、他のライブラリの束があること あなたはおそらく、CS50のコース上に使用します。 たとえば、文字列ライブラリはする機能を有している Cの文字列を比較し、それらの長さを取得し、それらを連結します。 と数学ライブラリは、役に立つ与える πとeのような定数。 さて、他のプログラミングの標準ライブラリに比べ 言語は、C標準ライブラリは、本当に小さいです しかし、彼らはまだなもののかなりの量を持っています。 そして、それは標準ライブラリであることを言うことはありません 唯一のCライブラリー;でそこに他にもたくさんあり​​ます あなたは、CS50図書館など、使用するための世界 暗号化と復号化と地図作成ライブラリ エンコードとする機能を持つ関数は、ライブラリ ビデオを再生する、というように。 これはさておき重要に私たちをもたらします。 エンジニアリングの不可欠なスキルの一つは知っている ツールボックスで使用可能なツールを使うことができますように 彼らとしない限り、車輪の再発明を避ける あなたはそうしなければならない。 プログラマーとして、図書館は最も重要なの一つです 我々が持っているツール。 あなたが見つけたときに自分で面倒or思われる課題に直面して C言語の文字列の長さを見つけるような、ありふれた、あなた それはそうかもしれない場合は、自分自身に問うべきである 誰かが既に前に同じことを行っている。 チャンスはあなたがいくつかを見つけることができるということです ライブラリ内で助ける。 だから、技術的な面では、ライブラリはバイナリファイルということです のコレクションを一緒にリンクすることによって製造されている というツールを使用してオブジェクト·ファイルは、 リンカは、それを推測した。 オブジェクトファイルには、ものです。oファイルするときあなたが得ること Cのソースコードをコンパイルします。 プログラマがライブラリを書くとき、彼らは一般的に の2種類のファイルに自分のCコードを区切ります。 ヘッダファイルと実装ファイル。 慣例により、ヘッダー·ファイルは、。hファイルの拡張子を指定され そして、それは図書館のを宣言するコードを含んでい あなたが使用するために利用可能なリソース。 これらのリソースには、関数、変数、構造体を含める 型定義など、一緒に、彼らは 一般的なインターフェースと呼ぶ。 実際には、場合は、これまで、図書館に何があるか疑問に思っている ヘッダファイルが見える場所です。 たとえば、/ usr / includeはstdio.hをプルアップし、チェックすることができます すべてアウトあなたは今までについて知りたいと思った 標準入出力ライブラリ。 そこここにあるものがたくさんだし、それはのビットを取ることができる かき分けていくための時間。 ただし、Googleおよびマンページと一緒に、これは あなたがどの​​ように標準I / O迷ってい​​る場合に行く場所 ライブラリ関数は動作します。 だから、ここで注意すべき一つのキーの事は、しかし、そのヘッダファイルである 一般的に関数定義が含まれていません - つまり、実際の関数の実装である。 これは、重要なコンピュータ科学の実例である またで呼ばれ、情報隠蔽と呼ばれる原理 カプセル倍。 ライブラリのユーザまたはクライアントとして、以下を実行する必要はありません。 ライブラリー内の内部について知る それを使用するため。 ほんの少し前にprintfを見て覚えていますか? あなたは今まで前に実際のコードを見ていた? まあ、私はあなたかもしれませんが、あなたがいないことを前提としてい 回のprintfのトンを使用している。 あなたが知ってなければならなかったすべては関数宣言に存在していた stdio.hヘッダーファイルインチ とにかく、良い情報隠蔽の利点は、あなた そしてあなたが書くプログラムは、内の任意の変化から絶縁されている ライブラリ関数の実装のコード。 printf関数の実装が変更された場合は、持っていない 行くとprintfを使用するすべてのプログラムを変更することができます。 だから実装はどこへ行くのでしょうか? さて、もう一度、慣例により、実装がで行く cファイルの拡張子を持つファイル。 通常、ヘッダファイルと実装ファイルは手をとって行く 手にしているので、新しい文字列の束を宣言した場合 mystring.h内の関数は、あなたはすべてを定義します mystringにそれらの関数ますc。 それではヘッダーと実装ファイルは、その後アール 次にリンクされるオブジェクトファイルを作成し、コン​​パイル バイナリライブラリファイルを生成するために一緒に。 ライブラリの作成者は、その後に沿ってバイナリファイルを出荷します ヘッダファイル使用するプログラマにと 図書館。 この時点で、。cの実装ファイルではありません そう、最初からライブラリを再コンパイルする場合を除き、必要に応じて 彼らはしばしば外に取り残されている。 Cライブラリを使用するには、二つのことを行う必要があります。 まず、#ライブラリのヘッダファイルをインクルードしなければなりません 使用したいソースコードファイル ライブラリのコード。 これは、宣言のすべてのコンパイラに通知 内に存在する関数、変数、構造体、エトセトラ、 ヘッダファイルには、コンパイラは、1保証できなくなるということ あなたは、適切な方法で図書館の資料を使っている 二、適切なアセンブリコードを生成します。 ライブラリのヘッダファイルがどこにあるかに応じて、 位置、#includeの構文が異なります。 ヘッダファイルは、システムの内に存在する場合 デフォルトでは、ディレクトリを含める - 一般的に、usr/include-- その後、角括弧構文は#includeのように、使用されている 。 ただし、ヘッダー·ファイルは同じに置かれている場合 ディレクトリには、独自のコードのように、二重引用符の構文は次のとおりです。 # "mylib.h"を含めるように、使用される。 あなたがしなければならない二つ目は、バイナリにリンクすることです あなたのコードをコンパイルするライブラリファイル。 これは超重要なステップです。 ヘッダ方法についての我々の以前の議論を覚えています ファイルには、実装コードが含まれていませんか? この手順を忘れてしまった場合は、約エラーが出るでしょう 未定義のシンボルは、コード内で参照されています。 これを解決するには、-lフラグの直後に使用 ライブラリの名前でスペースを入れず。 アプライアンスを含む多くのシステムでは、C標準 ライブラリは自動的にリンクされています。 しかし、数学ライブラリは時々別々にバンドルされています と-lm​​でリンクする必要があるかもしれません。 アプライアンスでは、我々はあなたのためにこれの世話をする、そして我々も -lcs50とCS50ライブラリをリンクします。 あなたは、makeを実行するアプライアンスでこのすべてを見ることができます。 今度はあなたが使用する必要が知識を持っている必要があり Cのライブラリは、探索の楽しみを持ちなさい。 私の名前はネイトHardisonであり、これはCS50です。