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.5 externと外部結合
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.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章で詳細を記述。