第6章 記憶クラス

 

6.1 記憶クラス指定子

auto(自動変数)

static(静的変数)

extern(外部結合)

register(レジスタ変数)

mutable(const効果の取消)

6.2 ローカル変数とグローバル変数

関数の内部で宣言した変数は、その関数の中だけで有効です:ローカル変数(局所変数)

関数の外側で宣言されている変数は、そのファイル内のどの関数からでも使用可能です:グローバル変数(広域変数、大域変数)

6.3 自動変数(auto)

auto int a; // int aと同義

int a; // auto int aと同義

6.4 静的変数(static)

6_6-4

6.5 externと外部結合

6_6-5

6_6-5ex

6.6 register指定子

register int i;

register unsigned int i;

その変数をレジスタに割り当てる。

処理を高速化するものだが、現在ではほとんど使用されていない。

6.7 グローバルなstatic

static int dt;

int main() {...}

グローバル変数にstaticを付けると、グローバル変数ではあるが、

別の翻訳単位からは参照されたくない場合に利用できる。

extern int dt;

としても別の翻訳単位にあるモジュールなので外部参照できないエラーとなる。

static void foo() {...}

のようにstatic付きで定義した関数も内部結合となり、他の翻訳単位から呼び出しできない。

6.8 宣言位置と有効範囲

/* 宣言位置以降で有効 */

グローバル変数の例

int g1;

int main() {...} // 変数g1だけ使用できる

int g2;

void sub(int n) {...} // 変数g1とg2を使用できる

ローカル変数の例

int main ()

{

 int a;

 int b;

}

同一行内の宣言の例

int a = 10, *p = &a; // 正しい

int *p = &a, a = 10; // エラー

6_6-8

6.9 リンケージ指定

/* リンケージ指定 */

extern "C" int myfunc1(int n);

myfunc1()関数がCでコンパイルされる

/* C言語関数へのリンケージ */

extern "C"

{

 int myfunc2();

 int myfunc3(int n);

}

extern "C"

{

 #include "myhead.h"

}

6.10 mutable指定子

クラスのデータメンバに対して使うもので、

const指定の効果を取り消し、データメンバの変更を可能にする役目をもつ特殊な機能。

25章で詳細を記述。