静的ストレージ クラス指定子
静的なストレージ クラス指定子である、static および extern は、オブジェクトと関数に適用できます。 次の表に、static キーワードと extern キーワードを使用できる場合とできない場合について示します。
static と extern の使用
構造 |
static の 使用可否 |
extern の 使用可否 |
---|---|---|
ブロック内の関数宣言 |
X |
○ |
関数への仮引数 |
X |
X |
ブロック内のオブジェクト |
○ |
○ |
ブロック外のオブジェクト |
○ |
○ |
関数 |
○ |
○ |
クラスのメンバー関数 |
○ |
X |
クラスのメンバー データ |
○ |
X |
typedef 名 |
X |
X |
static キーワードを使用して指定された名前は、外部リンケージを持つクラスの静的メンバーである場合を除いて、内部リンケージを持ちます。 つまり、その名前は、現在の翻訳単位の外部からは参照できません。 extern キーワードを使用して指定された名前は、あらかじめ内部リンケージを持つものとして定義されていない限り、外部リンケージを持ちます。 名前の可視性の詳細については、「スコープ」および「プログラムとリンケージ」を参照してください。
注意
inline として宣言された、クラスのメンバー関数ではない関数には、static として宣言された関数と同じリンケージ特性が与えられます。
コンパイラによってまだ宣言が検出されていないクラス名は、extern の宣言内で使用できます。 このような宣言で導入された名前は、そのクラス宣言が検出されるまでは使用できません。