サーチ…


単純なブロックスコープ

ブロック{ ... }内の変数のスコープは、宣言後に始まり、ブロックの最後で終了します。ネストされたブロックがある場合、内部ブロックは外部ブロックで宣言された変数のスコープを隠すことができます。

{
    int x = 100;
    //   ^
    //   Scope of `x` begins here
    //
}   // <- Scope of `x` ends here

ネストされたブロックが外部ブロック内で開始された場合、外部クラスの前にある同じ名前を持つ宣言された変数が新たに宣言され、最初の変数が隠されます。

{
    int x = 100;

    {
        int x = 200;

        std::cout << x;  // <- Output is 200
    }

    std::cout << x;  // <- Output is 100
}

グローバル変数

異なるソースファイルからアクセス可能な変数の単一のインスタンスを宣言するためには、キーワードexternしてグローバルスコープ内で変数を作成することができます。このキーワードは、コードのどこかにこの変数の定義があるので、どこでも使用でき、すべての書き込み/読み出しがメモリの1つの場所で行われることをコンパイラに示します。

// File my_globals.h:

#ifndef __MY_GLOBALS_H__
#define __MY_GLOBALS_H__

extern int circle_radius; // Promise to the compiler that circle_radius 
                          // will be defined somewhere

#endif

// File foo1.cpp:

#include "my_globals.h"

int circle_radius = 123; // Defining the extern variable

// File main.cpp:

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

int main()
{
    std::cout << "The radius is: " << circle_radius << "\n";'
    return 0;
}

出力:

The radius is: 123


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow