| 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. | ← → 目次 索引 |