| 1 | == ネームスペース== |
| 2 | |
| 3 | ネームスペースは、一般名前有効範囲を区切り、セルタイプ、シグニチャの名前衝突を防ぐために用いられます。 |
| 4 | |
| 5 | 【記述例】 |
| 6 | {{{ |
| 7 | namespace nNS { |
| 8 | signature sSig { |
| 9 | void func( void ); |
| 10 | }; |
| 11 | [active] |
| 12 | celltype tCelltype { |
| 13 | entry sSig eEntry; |
| 14 | }; |
| 15 | }; |
| 16 | |
| 17 | cell nNS::tCelltype Cell { |
| 18 | }; |
| 19 | }}} |
| 20 | |
| 21 | ここで namespace はキーワードであり、nNS はネームスペース名です。'{', '}' に囲まれた中に、シグニチャ (signature)、セルタイプ (celltype) を記述します。 |
| 22 | |
| 23 | 慣習として、ネームスペース名は 'n' で始めます。 |
| 24 | |
| 25 | 同じネームスペース名を持つネームスペースを、繰り返し記述することができます。 |
| 26 | |
| 27 | ネームスペースは、再帰的に設けることができます。 |
| 28 | |
| 29 | 【補足説明】ネームスペースは、セルタイプとシグニチャのみに用いる。セルは、リージョンの下に置く。名前衝突回避とともにセルのレイアウト制御を行う。 |
| 30 | |
| 31 | 【補足説明】以下のものも、ネームスペース下に置くことができない。 |
| 32 | * 構造体 (struct) タグ |
| 33 | * 型定義 (typedef) された型名 |
| 34 | * 定数 (const) |
| 35 | * 列挙型 (enum) |
| 36 | これらを TECS CDL でネームスペース下に置くことに技術的困難はないが、C 言語の生成コードにおいて短縮して記述する方法がなく、グローバル名を使用することになり利便性がないため。 |
| 37 | |
| 38 | === ネームスペース識別子 === |
| 39 | |
| 40 | ネームスペース識別子は、ネームスペースに属するシグニチャやセルタイプを、異なるネームスペースから参照する際に用います。 |
| 41 | シグニチャ名、セルタイプ名を指定する箇所で、ネームスペース識別子を用いることができます。 |
| 42 | |
| 43 | リージョンは、ネームスペースと同様に名前有効範囲を区切ります。 |
| 44 | 従ってセル名を指定する箇所でも、ネームスペース識別子を用いることができます。 |
| 45 | |
| 46 | 【記述例】 |
| 47 | {{{ |
| 48 | nNS::sSig |
| 49 | nNS::tCelltype |
| 50 | }}} |
| 51 | |
| 52 | ネームスペース識別子は、一般名前有効範囲に属する物を参照するときに使用します。 |
| 53 | ネームスペース識別子には、以下の3種類があります。 |
| 54 | |
| 55 | {{{#!th |
| 56 | 種類 |
| 57 | }}} |
| 58 | ||= 参照する対象 =||= 記述例 =|| |
| 59 | |----------------- |
| 60 | {{{#!td |
| 61 | 単一の識別子 |
| 62 | }}} |
| 63 | {{{#!td |
| 64 | 同じネームスペース、または親ネームスペースに存在する物を参照。 |
| 65 | |
| 66 | 同じネームスペースの物が優先されます。親ネームスペースにも存在しない場合、[[BR]] |
| 67 | 更にその親ネームスペースを再帰的に探索していき、見つかった物を参照します。 |
| 68 | }}} |
| 69 | {{{#!td |
| 70 | tCelltype [[BR]] |
| 71 | sSignature |
| 72 | Cell |
| 73 | }}} |
| 74 | |----------------- |
| 75 | {{{#!td |
| 76 | 絶対パス指定 |
| 77 | }}} |
| 78 | {{{#!td |
| 79 | ルートネームスペース (ルートリージョン) から指定して、物を参照。 |
| 80 | }}} |
| 81 | {{{#!td |
| 82 | ::nNS::tCelltype [[BR]] |
| 83 | ::rRegion::rSubRegion::Cell |
| 84 | }}} |
| 85 | |----------------- |
| 86 | {{{#!td |
| 87 | 相対パス指定 |
| 88 | }}} |
| 89 | {{{#!td |
| 90 | 入れ子の内側のネームスペースに存在する物、または親ネームスペースに存在する物を参照。 |
| 91 | |
| 92 | '::' で区切られた最初の識別子を名前とするネームスペースが同一ネームスペースになければ、[[BR]] |
| 93 | 親ネームペースを再帰的に探索します。 |
| 94 | 入れ子の内側へ向かって再帰的な探索は行われません。 |
| 95 | }}} |
| 96 | {{{#!td |
| 97 | nNS::sSignature [[BR]] |
| 98 | nNS::nSubNS::tCelltype |
| 99 | }}} |
| 100 | |----------------- |
| 101 | |
| 102 | 単一の識別子、および相対パス指定の先頭の識別子と一致するものがネームスペース内にないとき、上位のネームスペースから探索します。 |
| 103 | |
| 104 | ------ |
| 105 | [TECS リファレンスマニュアル [wiki: トップページ]]・ |
| 106 | [TECS CDL リファレンスマニュアル [wiki:CDLref トップページ]・[wiki:CDLref_index 目次]] |