私はEQUATE文を使用して定数を作成し、複数のプログラムで使用できるようにするには、それらを独自のレコードに配置し、$ INCLUDE文を使用して他のプログラムへの定義。すべての値はコンパイル時に確立されることに注意してください。
コンパイル時以外の時に設定される "定数"に関しては、タグを介して間接的に値を参照する(定数参照を渡す)場合、ほとんどのU2プログラマは何らかの制御レコードを使用します。ファイルシステムとU2のプログラミング言語はとても絡み合っているので、誰もこれについて二度考えていることはありません。私が使ったほとんどのシステムには、自由形式のレコード構造を持つ "SOMETHING.OR.OTHER.CTRL"のようなものが1つ以上あります。エディタは、 "INVENTORY.CONSTANTS"のような機能を記述するキーを使用して、制御ファイル内のレコードにデータを埋め込むために使用されます。
間接参照の場合、「定数」の名前が複数の値を持つ第1の属性と、複数の値を持つ「定数」の値を持つ第2のフィールドを持つレコードを設定します。このように:
INVENTORY.CONSTANTS:
001: JOHN*PAUL*GEORGE*RINGO
001: 100*57*83*19833
(「*」は実際には値マークです)。
その後、プログラムは、次の操作を行います。
SUBROUTINE SAMPLE(CONSTANT.NAME)
.
.
.
OPEN "","SOMETHING.OR.OTHER.CONTROL" TO CTRL.FILE ELSE BOMB
READ CONST.REC FROM CTRL.FILE, "INVENTORY.CONTSTANTS" THEN
LOCATE CONSTANT.NAME IN CONST.REC<1> SETTING CONST.POS THEN
CONST.VALUE = CONST.REC<2,CONST.POS>
END ELSE
BOMB
END
END ELSE
BOMB
END
ポイント1:EQU/EQUATEはプリプロセッサを使い、特定の変数をコンパイル時に指定の値に置き換えていると思います。 Nevertheles、私はUniVerseで定数を宣言する方法だと思います。ポイント2:これは素晴らしいです!それはまさに私が探していたものです!そして私は、私はC++のバックグラウンドを持っていると説明しておかなければなりません。ありがとう! –
UniDataでは、コンパイル時に、オブジェクトコードの先頭に値のテーブルを作成します。これらの値を使用するバイトコードでは、その値のテーブル位置を参照します。私はUniVerseが似ていると思います。 –