4.記憶クラス

4-3. 外部結合

◆外部結合

外部結合(extern)です。別名:外部参照とでも言いましょうか、

これは、他のファイルで宣言されているグローバルオブジェクトを参照するための記憶域期間で実際にexternで宣言した部分ではメモリ上に領域を確保されません。

…..で、グローバルオブジェクトとは?

関数の外で宣言されたオブジェクトをさします。

具体的には、以下のプログラム

#include<stdio.h>

 /*下の3つがグローバルオブジェクト */
int  i=0;
char c=0;
int arr[]={1,2,3,4};

main()
{
    double f=1.2; /* ローカルオブジェクト main()内なので */
    printf("f = %f",f);
}

そして、他のファイルとは?

C言語では、複数のファイルをコンパイルしてひとつのプログラムを作ることができます。

たとえば、上のプログラムでも普段使っているprintf()がありますが、これは最初から使えるものではなく(使える開発環境もありますが)
#include<stdio.h> によってスタンダードI/Oヘッダーを読み込んでいるためです。

つまりスタンダードI/Oヘッダー(stdio.h)にprintf()の宣言がされているため何も問題なくprintf()を使うことができるのです。

ちょっと話がそれましたが、extern は他のファイルで宣言されているグローバルオブジェクトの参照のために宣言されるので、実際問題として同名のオブジェクトが他のファイルに存在してないとだめです。

ちなみに分割コンパイルする場合に使うので、#include で取り込んだら externを使う必要性がなくなって自分も使ったことないのです。

しかもC++ではexternは違う意味で使うし…
(開発環境がVC++であることも理由の一つ)

分割コンパイルは後ほど違う開発環境で試してみようと思います。

今日はぜんぜん、イケてなくてすみません extern も分割コンパイルをするときにいっしょにやります。