Light C | ← → 目次 索引 |
型修飾子 (type qualifier) は、変数の属性を指定します。
型修飾子 | 説明 |
---|---|
const | 定数であることを示す |
volatile | この変数は自動的に変化する可能性がある |
far, _far | far メモリに置かれることを示す (非 ISO/JIS/ANSI) |
near, _near | near メモリに置かれることを示す (非 ISO/JIS/ANSI) |
データを変更できないことを示します。この属性を指定した変数の値を変更しようとすると、エラーになります。
const int i = 1; | // 初期化は可能 |
int const i2 = 1; | // こう書いても同じ |
i = 2; | // エラー |
char* const p = "A"; | // 変更できないポインタ |
const char* p2 = "A"; | // 変更できないデータへのポインタ |
char const* p3 = "A"; | // 同上 |
p[0] = 0; | // 有効 |
p2[0] = 0; | // エラー |
p = NULL; | // エラー |
p2 = NULL; | // 有効 |
たとえば入力ポートを指す変数など、自動的に変化する可能性がある特殊な変数に対して指定します。これにより、変数値の不変性を前提とした最適化が抑止されます。volatile 変数はレジスタ変数にはなりません。
8086 系の 16 ビット システムでは、セグメント レジスタに関連して、ポインタ (アドレス) に far と near の区別があります。「メモリ モデル」も参照してください。
次は、near モデルでの例です。
int i1[100]; | // near メモリに置かれる |
int near i2[100]; | // near メモリに置かれる |
int far i3[100]; | // far メモリに置かれる |
far int i4[100]; | // far メモリに置かれる |
void far func() { } | // far メモリに置かれるコード |
int* p1; | // near メモリに置かれる near ポインタ |
int far* p2; | // near メモリに置かれる far ポインタ |
far int* p3; | // 同上 |
int* far p4; | // far メモリに置かれる near ポインタ |
int far* far p5; | // far メモリに置かれる far ポインタ |
int far** p6; | // far ポインタへの near ポインタ (near メモリ上) |
int* far* p7; | // near ポインタへの far ポインタ (near メモリ上) |
near ポインタは 2 バイトで高速ですが、near メモリにあるデータしか指すことができません。far ポインタは 4 バイトで低速ですが、near メモリにあるデータと、far メモリにあるデータの両方を指すことができます。
関数専用です。「関数呼び出し規約」を参照してください。
関数専用です。「割り込みハンドラ」を参照してください。
Copyright © Tama Software Ltd, 1999-2012. | ← → 目次 索引 |