externキーワードで外部ファイルの変数・関数を利用

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

モジュールを制作する場合は、ファイルを分割しますから、複数のファイルをまたがって共通する変数を使ったり、別ファイルで定義してある変数を使いたい場面があります。
externキーワードで変数や関数を宣言すると、別ファイルで定義してある変数や関数にアクセスできるようになります。
externは、宣言だけであり、定義は行いません。

スポンサーリンク

以下のように、main.cppとinner.cppというcppファイルを2つ作ると、すべてのファイルがリンクされた後に、mainのルーチンが実行されます。

modulu/main.cpp

#include <iostream>
 
// 演算(全ループ)の回数
extern int count;
 
// インクリメントのルーチン
extern void increment();
 
// 九九ルーチン
int main() {
    int i;
    int j;
    for (i = 1; i <= 9; i++) {
        for (j = 1; j <= 9; j ++) {
            std::cout << i << " * " << j << " = " << (i * j) << "\n";
            increment();
        }
    }
    std::cout << count << " 回の計算を行いました。\n";
 
    return 0;
}

module/inner.cpp

// 演算(全ループ)の回数
int count = 0;
 
// インクリメントのルーチン
void increment() {
    ++count;
}

inner.cppの中で定義してある、変数count、および関数increment()を、main.cpp中でextern宣言しています。
countは演算の回数を表す変数で、increment()は演算の回数をインクリメントする関数です。
この宣言により、別ファイル(inner.cpp)で定義してあるcount、increment()を、メインルーチンが定義してあるファイル(main.cpp)で実行可能となります。
extern宣言がないと、コンパイルエラーとなります。

実行結果。

1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
81 回の計算を行いました。
スポンサーリンク
 
スポンサーリンク