変数の格納カテゴリ、内部外部関数【staticextern】

2406 ワード

変数の格納カテゴリ
ストレージ方法は静的ストレージと動的ストレージの2つに分類される.具体的には、自動、静的、レジスタ、外部の4種類が含まれています.
一、自動変数auto
ダイナミックストレージ、ダイナミックストレージ方式【ローカル変数+関数パラメータデフォルト時インスタントauto】
二、staticで静的局所変数を宣言する
1.関数内のローカル変数の値は、関数呼び出しが終了した後も消えずに元の値を保持します.すなわち、占有メモリセルは解放されません.(常考:このコードの実行結果を求める)
2.静的記憶領域が存在する.
3.静的局所変数の初期値の付与は、コンパイル時に行われ、すなわち、初期値のみが付与され、その後、関数が呼び出されるたびに初期値が再付与されなくなり、前回の呼び出し終了時の値が保持される.静的局所変数を定義して初期値を付与しないと、コンパイル時に自動的に0(数値クラス変数)または空の文字(文字型変数)【自動変数が初期値を付与しないと、固定されていないランダム値になります.】
4.関数呼び出し後も存在しますが、他の関数は参照できません.つまり、他の関数は表示されません.
三、registerでレジスタ変数を宣言する
一般に、変数はメモリに存在します.プログラムがどの変数の値を使用する必要がある場合、コントローラはメモリ内の変数の値をCPU内の演算器に送るよう指示する.オペレータを介して演算を行い、必要に応じて数を格納し、オペレータからメモリにデータを格納します.
実行効率を向上させるため、C++はローカル変数の値をCPUのレジスタに入れることを許可し、時間をかけて直接レジスタから参加演算を取り出す必要があり、レジスタへのアクセス速度はメモリへのアクセス速度よりはるかに大きいため、実行効率を向上させることができる.
現在の最適化コンパイルシステムは、頻繁に使用される変数を識別し、これらの変数をレジスタに自動的に配置することができるので、実際にregisterで宣言する必要はありません.
 
四、externで外部変数を宣言する
静的ストレージ領域が存在します.
1.グローバル変数を1つのファイルに宣言
すなわち、定義の前に参照/使用するため、externキーワードを事前参照宣言として使用し、その役割ドメインを拡張します.
2.複数ファイルのプログラムで外部変数を宣言する
1つのプログラムに2つのファイルが含まれている場合、2つのファイルで同じ外部変数numが使用されます.2つのファイルでそれぞれ1つの外部変数を定義することはできません.そうしないと、プログラムの接続中に「繰り返し定義」のエラーが発生します.
file1.cpp
extern int a.b;
int main(){
……
}


flie2.cpp
int a = 3, b = 4;

正しい方法:いずれかのファイルで外部変数numを定義し、別のファイルでnumをexternで外部変数宣言します:extern int num;
コンパイルシステムは、このファイルで外部変数numの有無を探し、ある場合はその役割ドメインを本行の開始に拡張する(1に記載).なしの場合は、プログラム接続時に他のファイルから外部変数numの有無を探し、ある場合は別のファイルで定義された外部変数numの役割ドメインを本ファイルに拡張し、このファイルがこの外部変数numを合法的に参照できるようにします.
注意:1つのファイルの関数を実行すると、グローバル変数の値が変更され、別のファイルの関数の実行結果に影響を与える可能性があります.
五、staticで静的外部変数を宣言する
一部の外部変数を本ファイルにのみ参照させ、他のファイルに参照させることはできません.
次のようになります.
file1.cpp
static int a = 3;
int main(){
……
}



file2.cpp
extern int a;
int func(){
    a++;
}

file 1でstatic宣言を加えたこのファイルにのみ使用できる変数を静的外部変数と呼ぶ.
file 2はextern int aを使っていますが、ただしfile 1のaは使用できません.
プログラム設計では、各モジュールを個別に完了する人が多く、各人は独立してそれぞれのファイルで使用することができ、互いに関係なく使用することができます.さらに、他のファイルに誤用されないように、このファイルのすべてのグローバル変数にstaticを加えることができます.
注意:
1、グローバル変数は以下を含む:静的外部変数、外部変数(即ち非静的)
2、静的ストレージ:グローバル変数、静的ローカル変数!
3、externは定義された外部変数を宣言するためにしか使用できません.変数の定義には使用できません.
内部関数と外部関数
内部関数:static int fun(int a,int b)など、本ファイル内の他の関数でのみ呼び出されます.
外部関数:他のファイルで呼び出すことができます.関数を定義するときは省略し、デフォルトは外部関数です.呼び出し時にexternで使用する関数が外部であることを宣言します.