FreeBASIC マニュアルのトップに戻る

FreeBASIC ModuleDestructor

目次→命令文→手続きDESTRUCTOR (Module)←オリジナル・サイト

DESTRUCTOR (モジュール) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

プログラム終了処理で、手続きの実行を指定します。

構文:
[Public |Private] Sub identifier [Alias "external_identifier"] [()]Destructor [priority] [Static]
{ 手続きの本体 }
End | Sub

記述:
コンパイルしたプログラムのエンド・コードから自動的に呼ばれる手続きを、定義します。
エンド・コードは、コンパイラが発生して、プログラムが正常に終わるときに、実行されます。
解体子と定義された手続きは、普通の手続きと同じように用いられます。すなわち、 他の手続きからも、モジュール・レベル・コードからも、呼ぶことができます。

手続きは、空のパラメータ・リストが必要です。
Destructor 予約語が、1つ以上のパラメタを持っている Sub 定義に使われると、コンパイル時にエラーになります。
多重定義の手続きのセットでは、引数を取らない複数の Sub を持つあいまいさのため、1(1)解体子だけしか定義することができません。

一つのモジュールで、解体子は、通常、それらが定義される順番で実行されます。

単一のモジュールで、ターゲット・システムのビルドおよび実行時環境に応じて:
priority 属性(101 から 65535 までの整数)を使って、デストラクタを、特定の順序で強制的に実行することができます。
priority の値には特別な意味はなく、他のデストラクタ優先順位との番号の関係だけがあります。
101 が最も低い優先順位で、priority 属性を持つ他のデストラクタと比較して、最後に実行されます。

モジュールは、複数のデストラクタ手続きを定義できます。
デストラクタ手続きは、複数のモジュールにも使えます。
上記の構文で定義されたすべての手続きは、プログラムの終了時に呼び出される手続きのリストに、追加されます。

複数のモジュールで定義されたデストラクタが実行される順序は、リンク時にのみわかります。
したがって、デストラクタも定義している、2次モジュールを呼び出す可能性があるデストラクタを使う場合は、特に注意が必要です。
このような場合は、アプリケーションの正常な終了を保証するために、複数のモジュールの終了手続きを明示的に呼び出す、単一のデストラクタを使うことを推奨します。

プログラムが正常に終了した場合、またはエラーチェックが有効でプログラムが異常終了した場合に、デストラクタが呼び出されます。

ユーザー定義 type の、パブリック静的メンバー手続き(空のパラメータ・リストを持つ Sub)は、サブ手続きの定義で使われる Constructor キーワードを追加することによって、モジュール・デストラクタとして定義できます。

モジュール・デストラクタ機能は、ビルドおよび実行時環境の、低レベルのリンク時機能を提示します。
モジュール・デストラクタから、デストラクタを持つグローバル静的オブジェクトへのアクセスは、ビルド・システムごとに実行順序が異なるため、避けるべきです。

64-bit コンパイラのみの警告:ユーザー手続きの識別子名の選択については、識別子規則 を参照してください。(特に「プラットフォームの違い」の段落)

例:
Sub pauseonexit Destructor

    '' プログラムが終わり達するか、またはエラーで中止になると
    '' 終了する前に、この解体子を走らせます。
    Print "プログラムを終わらせるために、何かキーを押して下さい..."
    Sleep
   
End Sub

Dim array(0 To 10, 0 To 10) As Integer
Dim As Integer i = 0, j = 11

'' 配列の範囲をチェック可能でコンパイルすると、(fbc -exx ...)
'' 次の行は、エラーで中止になります。
Print array (i, j)


QBからの違い:

参照:

手続きに戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2021-08-30 02:41:48
日本語翻訳:WATANABE Makoto、原文著作者:JeffMarshall

ホームページのトップに戻る

表示-非営利-継承