宣言と定義
まず宣言と定義について話しましょう
宣言は変数の名前を指すだけであり、定義は変数の名前を指すのではありません。定義に Declare
extern int i; //変数 i が割り当てられているため、まだ使用できません。次の 3 つの状況が発生する可能性があります。 Once
int i; //変数 i が定義され、スペースを割り当てた後、
extern int a =0 //グローバル変数 a を定義し、それに初期値を与えます
int a =0;グローバル変数 a に初期値を与えます
注: 変数はプログラム内で複数回宣言できますが、定義できるのは 1 回だけです。
グローバル変数: 関数内で定義された変数はローカル変数と呼ばれ、そのスコープは定義時点から関数の終わりまでです。関数の外で定義された変数はグローバル変数と呼ばれ、そのスコープは定義時点からです。ファイルの最後まで。
グローバル変数であってもローカル変数であっても、スコープは定義した場所から始まります
extern
externはグローバル変数の宣言に使用されます
#include<iostream>using namespace std;int main(){ extern int a; cout<<a<<endl; //int a=5; this is wrong , a should be a global variable getchar(); return 0; }int a=5;//global variable
他のヘッダーに変数や関数を含めるには#includeを使用してくださいファイル宣言、なぜ extern キーワードが必要なのでしょうか?グローバル変数または関数 a を参照したい場合は、ソース ファイルに #includef309a191f3373e0d27442a5a200f12ba を直接含める必要があります (xxx.h には a の宣言が含まれています)。
test.h
#include<iostream> using namespace std; int changea(); //int temp2=1; 如果在此定义temp2的情况下,main.cpp和test.cpp都包含了test.h,会造成temp2的重复定义 extern int temp3;
test.cpp
#include "test.h" int temp1=1000; //int temp2=10; 如果不注释掉会出错 int temp3=100; extern const int temp4=400;
main.cpp
#include <cstdlib>#include <iostream>#include "test.h"using namespace std;int main(int argc, char *argv[]){ extern int temp1; cout<<"temp1 is"<<temp1<<endl; extern int temp4; cout<<"temp4 is"<<temp4<<endl; //extern int temp2; //cout<<"temp2 is"<<temp2<<endl; cout<<"temp3 is"<<temp3<<endl; system("PAUSE"); return EXIT_SUCCESS; }
出力:
temp1 is1000
temp4 is400
temp3 is100
temp1: test.cpp int で宣言temp1=1000、main.cpp で temp1 を使用、最初に temp1 が外部変数であることを宣言します
temp2: test.h で定義、main.cpp と test.cpp の両方に test.h が含まれており、temp2 定義の重複が発生します。プログラムをコメントアウトしてコンパイルします
temp3: test.h で宣言、test.cpp で定義、main.cpp で使用します
temp4: const のデフォルトは、グローバルに宣言されている場合でもローカル変数に設定され、初期値は必須です定義時に割り当てられます。外部から参照したい場合は、 extern を追加する必要があります
つまり、原則は次のとおりです。他のファイルでグローバル変数を使用したい場合は、 extern 型の変数名を定義する必要があります。そうすれば、それを使用できます
const 変数は、定義の前に他のファイルで使用されたい extern を追加する必要があります
グローバル変数と extern 関連の記事については、PHP 中国語 Web サイトに注目してください。