次の方法で共有


C ストレージ クラス

変数の "ストレージ クラス" は、項目が "グローバルな" 有効期間を持つか、"ローカルな" 有効期間を持つかを決定します。 C では、これらの 2 つの有効期間を "静的" と "自動" と呼んでいます。グローバルな有効期間を持つ項目はプログラムの実行を通して存在し、値が含まれます。 すべての関数にはグローバル有効期間があります。

ローカル有効期間を持つ自動変数、または変数は、自分が定義されているブロックに実行制御が渡されるたびに新しいストレージが割り当てられます。 実行から返るとき、変数には有効な値が含まれていません。

C には、次のストレージ クラス指定子が用意されています。

構文

storage-class-specifier:
auto
register
static
extern
typedef
__declspec (extended-decl-modifier-seq) /* Microsoft 固有の仕様 */

__declspec を除いて、宣言の declaration-specifier では 1 個の storage-class-specifier のみ使用できます。 ストレージ クラスの指定が行われない場合、ブロック内の宣言により自動オブジェクトが作成されます。

auto または register 指定子で宣言された項目にはローカルの有効期間があります。 static または extern 指定子で宣言された項目にはグローバルの有効期間があります。

typedef および __declspec は他の 4 つの storage-class-specifier 終端要素とは意味が異なるため、個別に説明しています。 typedef の具体的な情報については、「typedef の宣言」を参照してください。 __declspec の具体的な情報については、拡張ストレージ クラス属性に関するページをご覧ください。

ソース ファイル内の変数と関数宣言の配置は、ストレージ クラスと可視性にも影響します。 すべての関数定義の外側の宣言は、"外部レベル" で表示されます。関数定義内の宣言は、"内部レベル" で表示されます。

各ストレージ クラス指定子の厳密な意味は 2 つの要因に左右されます。

  • 宣言が現れるのが、外部レベルか内部レベルか

  • 宣言された項目が、変数または関数であるかどうか

Storage-Class Specifiers for External-Level Declarations (外部レベル宣言のストレージ クラス指定子)」および「Storage-Class Specifiers for Internal-Level Declarations (内部レベル宣言のストレージ クラス指定子)」では、各種宣言の storage-class-specifier 終端要素について記載し、変数から storage-class-specifier が省略されている場合の既定の動作について説明しています。 「Storage-Class Specifiers with Function Declarations (関数宣言を伴うストレージ クラス指定子)」では、関数と共に使用されるストレージ クラス指定子について説明します。

関連項目

宣言と型