Study & Practice

北海道札幌市のプログラマによる技術とか雑記のブログ

C言語 externによる外部宣言

K&R 1.10 外部変数と通用範囲のまとめ

外部変数とは、変数を関数の外側で定義する変数のことで、関数内の局所変数(ローカル変数)とは違い、任意の関数から広域的にアクセスできる変数のこと。

外部変数は局所変数とは違って関数が呼び出されたり終了するごとに現れたり消えたりするのではなく、ずっと存在し続けるため、関数が終了しても値は残ったままになっている。

外部変数を1つのファイルで扱う場合には、ファイルの最初の方(関数のプロトタイプ変数の前などが一般的な模様)で変数を定義し、それぞれの関数で使用する。

すると値が引き継がれて同じ一つの変数として使うことができる。

複数のファイルで使われる場合はヘッダファイルに変数を宣言をし、ソースファイルではextern宣言をしてヘッダファイルの宣言と結びつける必要がある。

K&Rではヘッダファイルではextern宣言が必要とは書かれていないが、ネットではヘッダファイルではextern宣言をするのが正しいと言っている人もいてよくわからない。

というか自分がよくわかっていないだけかもしれない。
なにか間違ったことを書いているかもしれないので、C言語を学んでいく上でより理解が深まったらこの記事もリライトしていこうと思う。

※気になって調べてみたらK&Rでは変数を使用するファイルでextern宣言が必要と書かれているがhttps://www.sejuku.net/blog/24107
]ではヘッダファイルでextern宣言が必要、とされている。ますます意味がわからない。

とりあえずextern宣言は、変数の定義は他のところでやってるけど、宣言はここでしますよ。というものらしい。