プログラミング言語 C

・ 関数の中で宣言された変数は その関数に固有のものであり、局所的な変数である。 それは 他の関数からは 直接アクセスできない。

・ (関数の)ルーティン内の局所変数は 関数が呼び出された間だけ存在し、その関数から制御が離れると - 抜け出ると - 消えてしまう。 これを 自動変数と呼ぶ。

・ 自動変数は 関数の呼び出しによって現われたり消えたりするので、一度呼び出されてから 再度呼び出されるまでの間、変数の値は保持されない。

・ そのため それぞれの関数の始めで (変数の)値をセットしておく必要がある。

・ そうしないと 変数の値には 不定値 - 予期しないデータ - が入ってしまうことになるからである。

・ 自動変数の代わりに、すべての関数に対して 外部的な - 参照可能な - 変数を宣言することもできる。 それは 他の関数の中でも その変数名を指定することによって 直接アクセスができる広域的な変数である。

・ この外部変数は 関数間のデータの受渡しを目的とした 引数リストの代わりとして用いられる。

・ 関数の 呼び出しから(次の)呼び出しまでの間も この変数は セットされた値を保持している。

・ 外部変数は 関数の外側で (そのタイプとともに)定義しなければならない。 このとき、実際の記憶の割り当ても行われる。

・ また 外部変数は それを使用する それぞれの関数内でも宣言する必要がある。 このとき、明示的に (変数には)予約語 extern を付けて宣言を行う。

・ ただし、(外部変数の)定義が 使用される関数以前に ソースファイルに記述されているのであれば、extern は省略することができる。

・ 実際、通常は ソースファイルの最初のところで 全部の外部変数を定義しておいて extern は省略している(ことが多い)。

・ プログラムを いくつかのファイルに分割し、特定のファイルで (すべての)外部変数を定義した場合には、(他のファイルで参照するためには) extern 宣言が 必要になる。

・ このように 変数や関数の extern 宣言を まとめたファイルを ヘッダと呼び、(呼び出す側の)ファイルの コードの最初に #include "ヘッダファイル名" と記述することによって 取り込むことができる。

・ このヘッダファイルのファイル名には .h という接尾子を付けておく規則になっている。

・ (また 関数自体を 外部変数として扱うときには)それが 引数のない関数であっても、引数リストには 予約語 void を明示的に 書き入れておくようにする。

・ (なぜなら C の)標準規格では 空のリストの場合、引数リストのチェックを まったく行わないからである。

・ (これまでの説明で)外部変数の参照について 宣言定義を 使い分けていたことに注意してほしい。

定義が、変数が実際につくられるか または 記憶の割り当てをされるか という指示を与えるのに対して、宣言では、その(変数の)タイプが指定されるだけであって、割り当ては まだされていない状態を さしているからである。(p38-41)