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

FreeBASIC ProPgVarProcLinkage

目次→教本→プログラマーのための案内Variable and Procedure Linkage←オリジナル・サイト

変数と手続きの結合 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

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

モジュールの中と、モジュールの間での、名前の可視性。

結合 は、プログラムの1つ以上のモジュールの間の、変数・オブジェクト・手続きの、名前の可視性について、言います。
言い換えれば、結合は、モジュール間で、名前がどう共有されるについてを、指定します。
名前が持つことができる、結合の2つの主な形があります: 内部外部 です。

内部結合

内部結合 の名前は、変数・オブジェクト・手続きが、これらが定義された自身のモジュールの中だけで、参照できます。
これらは、他のモジュールで、外形として、見えません。
これは、複数のモジュールが、同じ名前を使って、別の物を記述できることを、意味します。
結合が、名前の可視性について言及するだけであることに注意してください。記憶域クラスと存続期間に従って、内部結合をもった、変数・オブジェクト・手続きは、そのアドレスを使うモジュールの間で、共有できます。

モジュール範囲の宣言

モジュール範囲で宣言された、変数とオブジェクト名は、別の方法で ExternCommon と共に宣言されないかぎり、内部結合を持っています。
例えば、最初に DimStatic で設定された変数名は、内部結合を持っています。そして、これらの変数を、名前で参照できるのは、これらが定義されたモジュールの中だけです。
Shared を使うことは、モジュールの手続きの中で、名前を見えるようにするだけで、名前の結合には役立たないことに、注意してください。

Private と共に宣言された手続き名は、内部結合を持っています。

ローカル範囲の宣言

ローカルの範囲(例えば Do ループ、または手続きの本体で)で宣言された、すべての変数とオブジェクト名は、内部結合を持っています。

外部結合

外部結合 の名前は、これらの変数・オブジェクト・手続きが定義されたモジュールの中でも、別のモジュールの中でも、参照できます。
外部結合を持っているということは、名前が、他のモジュールに外面的に見えることを意味します。そして、この同じ外部名を使う、すべてのモジュールは、すべて、同じ変数・オブジェクト・手続きを、参照します。
したがって、ただ1つのモジュールだけで、外部名を定義することができます。(コンパイラは、外部結合で名前の追加定義を見つけると、重複定義に対して、エラーを表示します。)

モジュール範囲の宣言

モジュール範囲で宣言された、変数とオブジェクト名は、ExternCommon を使って、外部結合を持っていると、宣言されます。

Extern は、外部結合を持っている変数を宣言しますが、変数を定義しません。
この外部宣言は、同じ名前のどの定義にも優先しなければなりません。(Extern のない宣言は、内部結合を指定します。そして、現在、この同じ名前で、更に外部宣言をすると、重複定義となります。)。
Extern を使って宣言される、外部結合の、変数とオブジェクト名は、常に共有の範囲にあります。そして、手続き本体の中で、参照できます。

Common は、外部結合を持った変数を宣言して、変数の定義もします。
しかし、それは Extern と異なっていて、Common では、変数の定義が、1つ以上のモジュールで現れることができます。
配列で使われると、添字のない可変長の配列だけが、宣言されます。このため、配列は、実行時に配列を使う前に、DimReDim を使って、大きさを設定しなければなりません。
Common を使って外部結合で宣言されている、変数とオブジェクト名に、さらに、Shared 範囲指定子を与えると、範囲は、共有の範囲だけになります。
共有変数は、手続き本体の中で、参照できます。

ExternCommon の両方が、変数の宣言と、変数の定義の、両方で使われると、効果は、Common 命令文の意味が、まるでそれが Dim 宣言であるかのように振る舞うように変わります。
それで、一般に、同じモジュールの、同じ変数に、ExternCommon を混用することは、推奨されません。
しかしながら、変数は、1つのモジュールで Common を使って宣言されて、定義されていても、次に、別のモジュールで、混乱なく Extern で参照されることができます。

手続き名は、デフォルトで、外部結合を持つと宣言されます。
Public を使った宣言は、明示的に、外部結合を指定します。

ローカル範囲の宣言

現在、ローカルの範囲で宣言された名前は、外部結合を持つことができません。

プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2016-11-07 08:21:19
日本語翻訳:WATANABE Makoto、原文著作者:LaananFisher

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

表示-非営利-継承