1. ホーム
  2. c++

[解決済み] C++でexternを使用するタイミング

2022-03-21 01:36:08

質問

Think in C++"を読んでいるのですが、その中で extern という宣言があります。例えば

extern int x;
extern float y;

意味(定義のない宣言)はわかったような気がするが、いつ役に立つのだろう。

どなたか例を挙げてください。

どのように解決するのですか?

これは、グローバル変数を持っているときに便利です。を宣言します。 存在 ヘッダーでグローバル変数を定義すると、ヘッダーを含む各ソースファイルはその変数を知っていますが、ソースファイルの1つで1度だけ「定義」する必要があります。

明確にするために extern int x; 型のオブジェクトが int と呼ばれる x 存在する どこか . コンパイラは、その型と名前を知っていれば、それをどのように使うかがわかるだけで、どこに存在するかを知ることは仕事ではありません。すべてのソースファイルがコンパイルされると、リンカーは以下のようなすべての参照を解決します。 x を、コンパイルされたソースファイルの1つにある1つの定義に変換します。この機能を実現するためには x つまり、関数の外側で (通常「ファイルスコープ」と呼ばれる場所) で、かつ static キーワードを使用します。

ヘッダを表示します。

#ifndef HEADER_H
#define HEADER_H

// any source file that includes this will be able to use "global_x"
extern int global_x;

void print_global_x();

#endif

ソース1

#include "header.h"

// since global_x still needs to be defined somewhere,
// we define it (for example) in this source file
int global_x;

int main()
{
    //set global_x here:
    global_x = 5;

    print_global_x();
}

ソース2:

#include <iostream>
#include "header.h"

void print_global_x()
{
    //print global_x here:
    std::cout << global_x << std::endl;
}