C - ストレージ クラス
ストレージ クラスは、C プログラム内の変数や関数のスコープ (可視性) と寿命を定義します。それらは、変更する型に先行します。 C プログラムには 4 つの異なるストレージ クラスがあります −
- オート
- 登録
- 静的
- 外部
自動ストレージ クラス
オート ストレージ クラスは、すべてのローカル変数のデフォルトのストレージ クラスです。
{ int mount; auto int month; }
上記の例では、同じストレージ クラスで 2 つの変数を定義しています。 「auto」は、関数内、つまりローカル変数内でのみ使用できます。
レジスタ ストレージ クラス
レジスター ストレージ クラスは、RAM ではなくレジスタに格納する必要があるローカル変数を定義するために使用されます。これは、変数の最大サイズがレジスタ サイズ (通常は 1 ワード) に等しく、単項 '&' 演算子を適用できないことを意味します (メモリ ロケーションがないため)。
{ register int miles; }
レジスタは、カウンタなどの迅速なアクセスが必要な変数にのみ使用してください。また、「レジスタ」を定義しても、変数がレジスタに格納されるわけではないことに注意してください。これは、ハードウェアと実装の制限に応じて、レジスタに格納される可能性があることを意味します.
静的ストレージ クラス
静的 storage クラスは、スコープに出入りするたびにローカル変数を作成して破棄するのではなく、プログラムの存続期間中ローカル変数を存在させておくようにコンパイラに指示します。したがって、ローカル変数を静的にすると、関数呼び出し間で値を維持できます。
static 修飾子は、グローバル変数にも適用できます。これが行われると、その変数のスコープは、それが宣言されているファイルに制限されます。
C プログラミングでは、static の場合 がグローバル変数で使用されると、そのメンバーの 1 つのコピーのみがそのクラスのすべてのオブジェクトによって共有されます。
ライブデモ#include <stdio.h> /* function declaration */ void func(void); static int count = 5; /* global variable */ main() { while(count--) { func(); } return 0; } /* function definition */ void func( void ) { static int i = 5; /* local static variable */ i++; printf("i is %d and count is %d\n", i, count); }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
i is 6 and count is 4 i is 7 and count is 3 i is 8 and count is 2 i is 9 and count is 1 i is 10 and count is 0
extern ストレージ クラス
外部 ストレージ クラスは、すべてのプログラム ファイルに表示されるグローバル変数の参照を提供するために使用されます。 「extern」を使用する場合、変数を初期化することはできませんが、以前に定義された格納場所で変数名をポイントします。
複数のファイルがあり、他のファイルでも使用されるグローバル変数または関数を定義する場合、extern 定義された変数または関数の参照を提供するために別のファイルで使用されます。念のため、extern 別のファイルでグローバル変数または関数を宣言するために使用されます。
extern 修飾子は、以下で説明するように、同じグローバル変数または関数を共有する 2 つ以上のファイルがある場合に最も一般的に使用されます。
最初のファイル:main.c
#include <stdio.h> int count ; extern void write_extern(); main() { count = 5; write_extern(); }
2 番目のファイル:support.c
#include <stdio.h> extern int count; void write_extern(void) { printf("count is %d\n", count); }
ここで、extern カウントの宣言に使用されています 最初のファイル main.c にその定義があるため、2 番目のファイルにあります。次に、これら 2 つのファイルを次のようにコンパイルします −
$gcc main.c support.c
実行可能プログラム a.out が生成されます .このプログラムが実行されると、次の結果が生成されます-
count is 5
C言語