共有変数を定義します。共有変数とは、複数のソースファイルで共通に参照できるデータ領域です。
構文 COMM [NEAR|FAR] label [: type] [: num] [AS ext-name] ,... 例 COMM MSG:BYTE:10 COMM NEAR ABC:WORD:10, FAR DEF:BYTE
最初に「NEAR」または「FAR」を指定できます。省略すると通常は NEAR になりますが、.MODEL 文で LARGE または MEDUIM モデルを指定した場合は FAR になります。label は、この共有変数の名前です。
type には、label のタイプを指定します。
num は、確保するデータの個数です。省略すると 1 になります。
ext-name を指定すると、外部名を別の名前で参照できます。〔LASM〕
以上の組は、カンマで区切っていくつでも指定できます。
-------------------------------
COMM 文で定義した名前は外部に公開され、ほかのソースファイルから EXTRN 文などで参照できるようになります。
同じ名前の label が PUBLIC 文で宣言されている場合、COMM 文で定義した変数は、PUBLIC で宣言されたラベルに重ねられます。この場合、COMM 文に指定した type と num は無視されます。
同じ名前の label が PUBLIC 文で宣言されていない場合は、同じ名前の COMM 変数がリンク時にすべて重ね合わせられ、そのうち最も大きな共有変数の長さに合わせてデータ領域が確保されます。
-------------------------------
共有変数には NEAR 型と FAR 型があります。NEAR 型の共有変数は、リンク時に自動的に作成されるc_common という名のセグメントに置かれます。このセグメントは自動的に DGROUP というグループに所属します。FAR 型の共有変数は、同じように FAR_BSS というセグメント内に置かれます。このセグメントはグループには属しません。
共有変数のセグメントは、ほかのセグメントと比べて後の方に配置されますが、セグメント c_common はセグメント FAR_BSS よりも先になります。このため NEAR 型の共有変数の方がほかのデータと近く、ほかのデータと同じセグメントレジスタから参照できる可能性が高くなります。
共有変数は初期化できません。また、共有変数はソースファイル中の COMM 文の位置に対応してそのデータ領域の位置が決定するわけではないため、そのことでデータ領域の位置を制御することはできません。
-------------------------------
メモ COMM 文を使用した場合、V3.50 未満の Microsoft LINK.EXE は使用できません。