外部記憶域クラス(extern)

 C言語の記憶域クラス指定の中から、今回は外部記憶域クラスについて、ご紹介します。

 以前、グローバル変数のところで、

#include <stdio.h>

int x;

void plus1() {
    x = x + 1;
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    x = 1;
    plus1();
    
    printf("x = %d", x);
    
    return 0;
}

 このようなプログラムを例示しました。変数xは、main関数でも、plus1関数でも利用出来ます。さて、少し改変して、

#include <stdio.h>
#include "plus2.h"

int x;

void plus1() {
    x = x + 1;
    printf("plus1() : x = %d\n", x);
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    x = 1;
    printf("main() : x = %d\n", x);
    plus1();
    plus2();
    
    return 0;
}

 このようなプログラムにし、グローバル変数xをplus2.hの関数でも使用したい場合に、外部記憶域クラスの指定を行います。

 外部記憶域クラス指定をしたい場合は、

extern int a;

 このように、変数のデータ型の前に「extern」と付け加えます。先ほどのプログラムに加え、plus2.hを作成し、以下のように記述して下さい。

#include <stdio.h>

extern int x;

void plus2() {
    x = x + 2;
    printf("plus2() : x = %d\n", x);
}

 このプログラムを実行すると、

main() : x = 1
plus1() : x = 2
plus2() : x = 4

 このように表示されます。

■スポンサーリンク

このページの先頭へ