Next: , Previous: , Up: C Interface   [Contents][Index]


6.28.4 Defining library interfaces

以下のように、 一連の C 言語関数宣言(ライブラリ・インターフェイス)に名前を付けることができます:

c-library lseek-lib
\c #define _FILE_OFFSET_BITS 64
...
end-c-library

インターフェイスにこのような名前を付けると、 生成されるファイルの名前にその名前が含まれるようになり、 インターフェイスを 2 回目に使用するときに、 再度生成してコンパイルする代わりに既存のファイルが使用されるため、時間を節約できます。 生成されたファイルにはソース・コードの 128 ビット・ハッシュ(暗号的に安全ではありませんが、 この目的には十分である)が含まれているため、 宣言を変更すると新しいコンパイルが発生します。 通常、 これらのファイルは $HOME/.gforth/architecture/libcc-named にキャッシュされるため、 問題が発生した場合、 または再コンパイルの強制が必要なその他の理由がある場合は、そこにあるファイルを削除してください。

注意: c-library を使用すると、 一部の設定がリセットされるため、 そのライブラリに関連する他のすべての処理の前に c-library を使用する必要があることに注意してください。 c-library の考え方は、 一般的な使用法としては、 各 c-library...end-c-library ユニットを独自のファイルに配置し、 これらのファイルを任意の順序でインクルードできるようにすることです。 C 言語インターフェースを扱う他のすべてのワードは、 ボキャブラリ c-lib に隠されており、 c-library によって検索順序スタックの最上位に置かれ、 end-c-library によって検索順序スタックの最上位から削除されます。

注意: ライブラリ名はディクショナリに割り当てられないため、 ディクショナリ内の名前に影響を与えないことに注意してください。 ファイル・システムで使用されるため、 ファイル・システムに適した命名規則を使用する必要があります。 この名前はC言語のシンボルの一部としても使用されますが、 正当なC言語のシンボル名以外の文字はアンダースコアに置き換えられます。 また、 c-library の後で宣言した関数を end-c-library を実行する前に呼び出してはなりません。

これらの名前付きライブラリ・インターフェイスの主な利点は、 それらが生成されると、 その生成に使用したツール(特に C 言語のコンパイラと libtool)が不要になるため、 ツールがインストールされていないマシンでもインターフェイスを使用できることです。 Gforth のビルド・システムはこれらのライブラリをクロス・コンパイルすることもできるため、 ビルド・ツールがインストールされていないプラットフォームでもライブラリを利用できます。

c-library-name ( c-addr u –  ) gforth-0.7 “c-library-name”

c-addr u という名前で C ライブラリ・インターフェイスを開始。

c-library ( "name" –  ) gforth-0.7 “c-library”

c-library-name のパース対応(parsing)バージョンです

end-c-library ( ) gforth-0.7 “end-c-library”

直近の C ライブラリ・インターフェイスを終了し、 (必要に応じて)ビルドします。