こんにちは､ そしてようこそ｡
この講義では､ include文についてお話したいと思います｡
そしてまた､ 私たちが初めてCコードやCプログラムに挑戦したときから､
このinclude文に気づいていたはずなのです｡
この例では8行目にあります｡ これはチャレンジプロジェクトの基本的なCプログラムの例です｡
含まれているのがわかりますね｡
そして今､ プリプロセッサについて学んだので､ このポンド記号があるので､
これがプリプロセッサ指令であることがわかります｡
他のスペースの前にポンド記号で始まるものは､ プリプロセッサー・コマンド､
プリプロセッサー・ディレクティブである｡
そして､ 8行目のincludeという特殊なキーワードとポンド記号がプリプロセスされたディレクティブであることが分かります｡
では､ これが具体的に何をしているのか､ 説明したいと思います｡
これはどういうことでしょうか？
繰り返しますが､ これはcの基本的な概念で､ どのcプログラムにもあるため､
非常に早い段階で話をする必要があります｡
javaのimport文に慣れている人なら､ とてもよく似ています｡
しかし､ これからいくつかのスライドで詳しく説明しますが､ これはすべてのCプログラムで見ることができます｡
つまり､ include文はプリプロセッサー指示文であることが､ このポンド記号でわかるわけです｡
私たちは､ プログラミング言語ではこの用語を使うのが一般的だからという理由で､
特に理由もなくディレクティブではなくステートメントと呼んでいますが､ 技術的にはディレクティブです｡
そしてまた､ 私たちのプログラムの例では､ この角括弧の中に何かを入れていました｡
つまり､ このincludeキーワードと､ stdioというキーワードがあるわけです｡ h.
というわけで､ これは一例です｡
これは､ 最初のチャレンジで使ったものです｡
厳密には実行プログラムの一部ではありません｡
ただし､ これがないとプログラムは動きません｡
プリプロセスディレクティブであることは分かっています｡
プログラムの仕組みとしては､ あまり意味がないんです｡
これは､ コンパイラが実行される前に､ 「このインクルードで何かやっていましたよ」と伝えるだけなのです｡
だから､ もしそれがなければ､ コンパイラは文句を言ったり､ エラーを投げたりすることになる｡
だから必要なんですね｡
ポンド記号は､ プリプロセッシングディレクティブであることを示します｡
これは､ ソースコードをコンパイルする前に､ コンパイラに何かをするように指示するものであることをお話しました｡
プリプロセッシングのディレクティブはたくさんあり､ プリプロセッシングの講義でいくつかの例を示しました｡
定数､ 定義文の話をしました｡
ifやelseなど､ 条件付き前処理ディレクティブが異なるという話をしました｡
しかし､ これは本当によく使われるものの1つである､ includeです｡
これらのディレクティブは､ ソースコードのどこにあってもかまいませんが､ 通常は先頭に置かれます｡
具体的には､ このincludeプリプロセッサディレクティブは､ javaのimport文と非常によく似ているので､
ご存知の方はそちらをご覧ください｡
しかし､ それはどういう意味なのでしょうか？
つまり､ 上記の例では､ インクルード・パウンド・シンボル stdio を使っています｡ hの場合､ この名前のファイルにプログラムの内容を含めるようにコンパイラに指示していることになります｡
つまり､ stdioというファイル名がどこかに存在するわけです｡ h.
そして､ このディレクティブが言っていることは､ このディレクティブを含む私の現在のプログラムは､
コンパイルのためにこのファイル内のコンテンツの一部を必要としているということです｡
つまり､ 具体的には､ includeディレクティブは､ ファイル名が.NETで終わるようなものになります｡
h.
これらをヘッダーファイルと呼びます｡
通常､ ソースファイルの先頭に含まれるため､ ヘッダーファイルと呼ばれています｡
ヘッダーファイルをすべてインクルードするのが､ 最初の作業のひとつです｡
そしてまた､ このプリプロセッサー指示は､ そのファイル内のコンテンツの一部が欲しいと言っているのです｡
cファイルではありません｡
我々は､ .NET Frameworkで終わるファイルを知っています｡ cはcのソースファイルです｡
だから､ . hは他の何かでなければならない､ と｡
ヘッダーファイルなんです｡
そして､ それは､ その. h 拡張｡
そこで､ ヘッダーファイルとは何かについて説明します｡
ヘッダーファイルは､ そのファイルが提供するいくつかの関数に関する情報を定義します｡
そして､ ヘッダーファイルの内容のいくつかを例としてあげます｡
しかし､ まず最初に､ あるソースコードに関する情報を定義している｡
そして､ 特にこの例では､ インクルードされた stdio を使っています｡ hの場合､ これはcの標準ライブラリのヘッダを含んでいることになります｡
そこで､ 図書館の話をしたことを思い出してください｡
ライブラリは､ あなたのためにすでに書かれている追加機能であり､
あなたのプログラムに含めることで､ プログラムを書き直す必要がないようにするためのcです｡
ライブラリの例としては､ コンソールへの読み書き､ 出力の表示､ ファイルの読み書き､
ネットワーキングのコードなど､ さまざまなものがありますが､ 世の中にはたくさんの種類のライブラリがあります｡
しかし､ stdio. hはcの標準ライブラリです｡
これは､ プログラミング言語であるc言語が付属しており､
出力を表示する機能など､ さまざまな機能を備えていることを意味します｡
だからstdio｡ hは､ ヘッダーファイルです｡
これは､ コンパイラが実際に使用する前に理解する必要があるいくつかの機能を定義しています｡
だから具体的にはstdio｡ hはprintfに関する情報を含んでいます｡
それで､ 次回の講義では出力を表示するのに役立つprintfについてお話しますが､
printfはstdioの中にある関数です｡
h ヘッダーファイル｡
そのほかにも､ さまざまな機能を搭載しています｡
Stdioは､ standard input outputの略です｡
そこで､ このライブラリは､ 入力と出力を扱うための機能を含んでいることを説明する｡
そして､ これが「意味のある名前を使う」というコンセプトです｡
その図書館をジェイソンとかジェイソン...とは呼びたくないのです｡ hは意味がないからです｡
stdioを使用しています｡ hは､ 標準的なioと言っているからです｡
標準入出力､ そして､ そのライブラリはインポートアルファのための様々な機能を含んでいることは分かっています｡
具体的には､ チャレンジプログラムで使いたい機能は､ 最初のプログラムの例では､
printfという関数を使い､ コンソールに出力を表示することができます｡
それで､ このstdioを入れることで このprintfの機能を使うには､ このファイルをインクルードする必要があるということです｡
つまり､ ヘッダーファイヤーは､ コンパイラがプログラム内のあらゆる再利用コード､
関数を統合して利用するための情報を指定することになるのです｡
そのため､ 多くの異なる標準ライブラリのヘッダーファイルを使用することになります｡
hは1つだけです｡
また､ ネットワークコードやソケットコードの機能や関数のプロトタイプを定義するヘッダーファイルがあります｡
今回も､ 完全な単語を表す文字列など､ たくさんのものを見ていくことになります｡
しかし､ cプログラミング言語に付属するさまざまなライブラリの中のc標準ライブラリに加えて､
独自のヘッダーファイルを作成することができます｡ ヘッダーファイルはソフトウェアの再利用を可能にするため､
独自のヘッダーファイルを作成することになります｡
cで書かれた機能を再利用することができるのです｡
だから､ cの設計者はどこかで､ データを読み書きして入出力を処理するcのコードを全部書いてしまったのだ｡
この新しいCプログラマーが自分で書かなければならないのは困るのだ｡
だから､ 書いてくれてもいいし､ 使っていいと言ってくれるんです｡
そして､ その使い方は､ ヘッダーファイルをインクルードすることです｡
そして､ 開発者であるあなたは､ 大きな大きなプログラム､ 何千ものファイルの中で､
他のファイルで使用されるようなコードを書くかもしれません｡
それで､ 自分でヘッダーファイルを書くことになる｡
ヘッダーファイルには､ 関数のプロトタイプや定数など､
プログラムを使用する他のファイルに役立つさまざまなものが定義されており､
プログラムのコンパイルに役立ちます｡
つまり､ 本質的にはソフトウェアの再利用技術なんですね｡
そこで､ この標準的なioを入れることにします｡ 標準ライブラリのprintf関数を使用する必要があるときは､
いつでもプログラムの中のヘッダーファイルが必要とされます｡
これを入れなかった場合､ コンパイルできません｡
だから､ ある機能を使うときは必ずincludeを使わなければならない｡
ヘッダーファイルに関しては､ 大文字と小文字を区別する構文になっています｡
大文字と小文字の区別は､ 大文字と小文字の区別を意味します｡
どちらかをやるか､ もう一方をやるかが重要です｡
だから､ 常に小文字で書くべきだ｡
ヘッダーファイルは小文字で記述してください｡ そうしないと､ システムによっては異なる意味に解釈される可能性があります｡
ヘッダーファイルをプログラムに含めるには､ 2つの方法があります｡
pound include Jasonのような角括弧を使用することができます｡
hと山括弧で囲む｡
これは通常､ プリプロセッサに､ ある種のシステム・ディレクトリにあるファイルを探すように指示していることを意味します｡
通常､ プログラミング言語であるcに付属する標準ライブラリである｡
二重引用符を使うこともできます｡
二重引用符は通常､ それがユーザー定義のヘッダーファイルであることを意味します｡
これは､ 開発者として作成したもので､ cプログラミング言語には付属していないものですが､
いくつかのコードを再利用したいので､ そのヘッダーをそこに置いておきたいと思うのです｡
だから､ カレント・ディレクトリを見ろということにもなる｡
C11規格に準拠するすべてのcコンパイラには､ 標準ヘッダーファイルのセットが付属しています｡
これらは､ ライブラリを表す単なるヘッダーファイルです｡
言語に付属するCの機能｡
includeディレクティブを使う場合､ findやdefineでなければ､ 他のプリプロセッサーディレクティブを使うのが一般的で､
ファイルを2回以上includeしないようにします｡
これは効率化のためです｡
例えば､ printfを使って画面への出力を行っているプログラムに対して､
「この機能を標準ライブラリに追加してくれ」と言いたいわけです｡
プリプロセッサーは､ しなくてもいいことをたくさんしてしまうので､ 複数回インクルードするように指示するのはやめましょう｡
そのため､ 通常はif not definedを使用します｡
そのため､ 私が提供するいくつかの例では､ includeをif
not definesやdefineステートメントで包んでいます｡
以下は､ ヘッダーファイルの中身の例です｡
ヘッダーファイルがあり､ そこにコメントがあり､ 他のものがある可能性があります｡
主に関数のプロトタイプが含まれていますが､ 定数や型定義を含むこともできます｡
これらは､ 私たちがまだ理解していない概念です｡
でも､ いろいろなものが含まれていることを理解してもらうために､
図解しているだけです｡
しかし､ 再び私たちのstdioのために｡ hの中にprintfというものがあって､ printf関数を定義しているので､
リンクするときにその実装コードを見つけることができます｡
そこで､ いくつかの機能のプロトタイプを紹介します｡
関数プロトタイプは､ 単なる関数の名前です｡
関数が何であるかはもうわかっていると思いますが､ それは単にコードをグループ化する方法です｡
関数については､ 後でもっと詳しく説明します｡
つまり､ ヘッダーファイルには､ さまざまなものが含まれるのです｡
定義されたディレクティブ､ 定数､ 構造体宣言を含むことができます｡
これもまた､ 異なる変数､ 異なるデータをグループ化する方法である｡
Typedef文はデータ型に関係するものです｡
それについては､ またお話します｡
しかし､ ファンクションプロトタイプは本当に重要なものなのです｡
コンパイラが必要なコードを生成できるように､ 関数がどのように定義されているかを教えてくれているのです｡
実行可能なコードは､ ソースコード・ファイルに入ります｡
ソースコード・ファイルの末尾は. c 拡張｡
実行可能なコードは通常､ ヘッダーファイルには書き込まない｡
一部例外もあります｡
インライン化する場合､ ソースコードをヘッダファイルにまとめると効率的ですが､
一般的には.NET Frameworkを使用します｡
hファイルでは､ ヘッダーファイルには実装コードが含まれないことになります｡
定義だけのコード行が含まれることになる｡
わかったよ､ そこに理屈はないだろう｡
定義づけになるんです｡
この機能は存在します｡
その機能は存在します｡
これらの定数は存在します｡
このような異なる構造が存在します｡
このコードがどうしてそうなっているのか､ 言わないんです｡
ただ､ そこにあることを伝えているだけなのです｡
コンパイラがリンクを生成するために必要なものです｡
さて､ それでは自分でヘッダーファイルを作成することにしましょう｡
機能追加のためにシステムヘッダーファイルを使用することになります｡
このinclude指示は､ どのプログラムでも目にすることになるので､
cプログラムを書く前に理解しておく必要がある概念です｡
そして､ どこかに追加のコードを入れていることを､ 再度プログラムに伝えているだけなのです｡
この定義コードを追加することで､ cプログラム内のこの異なるコードで､
これらの異なる関数を呼び出すことができるようになりました｡
ということで､ ご理解いただけたでしょうか｡
繰り返しになりますが､ これは本当に複雑な概念ではありません｡
追加でコードを入れています｡
直感的にわかると思いますが､ 順を追って例を挙げていきます｡
ありがとうございます｡