C++のexternストレージクラス
externストレージクラス指定子を使用すると、複数のソースファイルが使用できるオブジェクトを宣言できます。 extern宣言は、記述された変数を現在のソースファイルの後続部分で使用できるようにします。この宣言は定義を置き換えるものではありません。宣言は、外部で定義された変数を記述するために使用されます。
extern宣言は、関数の外部またはブロックの先頭に表示できます。宣言が関数を記述している場合、または関数の外部に表示され、外部リンケージを持つオブジェクトを記述している場合、キーワードexternはオプションです。
識別子の宣言がファイルスコープにすでに存在する場合、ブロック内で見つかった同じ識別子のextern宣言は、同じオブジェクトを参照します。ファイルスコープに識別子の他の宣言が存在しない場合、識別子には外部リンクがあります。
C ++は、externストレージクラス指定子の使用をオブジェクトまたは関数の名前に制限します。型宣言でextern指定子を使用することは違法です。 extern宣言はクラススコープに表示できません。
次のようにexternキーワードを使用して、ファイル間で変数を共有できます-
file3.h
extern int global_variable; /* Declaration of the variable */
file1.c
#include "file3.h" /* Declaration made available here */ #include "prog1.h" /* Function declarations */ /* Variable defined here */ int global_variable = 37; /* Definition checked against declaration */ int increment(void) { return global_variable++; }
file2.c
#include "file3.h" #include "prog1.h" #include <stdio.h> void use_it(void) { printf("Global variable: %d\n", global_variable++); }
stackoverflowでの次の質問は、externキーワードの本質を完全に捉えています:https://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files。
-
C++のMazeII
空のスペースと壁のある迷路の中にボールがあるとします。これで、ボールは上、下、左、右などの任意の方向に転がることで空のパスを通過できますが、壁にぶつかるまで転がりが止まりません。ボールが止まると、次の方向を選択できます。 ボールの位置、目的地、迷路を開始する必要があります。ボールが目的地に停止するための最短距離を見つける必要があります。ここで、距離は実際にはボールで覆われている空のセルの数によって定義されます(開始位置を除く、開始位置を含む)。それが目的地でボールを止めることが不可能な場合は、-1を返します。 迷路は1つの2D配列で表されます。ここで、1は壁を示し、0は空きスペースを示しま
-
C++の迷路
空のスペースと壁のある迷路の中にボールがあるとします。これで、ボールは上、下、左、右などの任意の方向に転がることで空のパスを通過できますが、壁にぶつかるまで転がりが止まりません。ボールが止まると、次の方向を選択できます。 ボールの位置、目的地、迷路を開始し、ボールが目的地に止まるかどうかを確認する必要があります。迷路は1つの2D配列で表されます。ここで、1は壁を示し、0は空きスペースを示します。迷路の境界はすべて壁です。開始座標と宛先座標は、行と列のインデックスで表されます。 したがって、入力が2D配列で表される迷路のようなものである場合 0 0 1 0 0