EXTERNAL

省略形:EXT

EXTERNAL は、宣言された名前が外部範囲を持つことを指定する範囲属性です。つまり、プログラム内での場所を問わず、EXTERNAL 属性も指定されているこの名前のすべての宣言は、同じオブジェクトを指します。

EXTERNAL 属性は、ストレージ クラスが STATIC または CONTROLLED である変数の宣言でのみ使用できます(暗黙的に EXTERNAL STATIC である、GLOBALDEF および GLOBALREF ストレージ クラスの変数には、重複して指定することもできます)。変数に EXTERNAL が指定されており、ストレージ クラス属性が指定されていない場合は、デフォルトで STATIC が設定されます。形式は次のとおりです。

EXTERNAL[(global_name)]

global_name は、文字列定数、または文字列定数の %REPLACE 名です。global_name は、エントリを参照する際にリンカーによって使用されます。Open PL/I では global_name の内容に対する制約事項はありませんが、基盤となるオペレーティング システムで制約事項がある場合があります。

エントリが別のモジュールで宣言されている場合は、EXTERNAL を指定する必要があります。EXTERNAL(global_name) は、PROCEDURE 文または ENTRY 文のオプションとして指定します。

EXTERNAL(global_name) オプションを使用すると、外部入り口定数に別の名前を指定できます。通常の入り口定数名の代わりに、代替名 (global_name) を使用して、エントリ ポイントでプロシージャを呼び出すことができます。

OZS: PROCEDURE;
      DECLARE PROC1 ENTRY;
      DECLARE ALSO_PROC1 ENTRY EXTERNAL('PROC1');
      DECLARE PROC2 ENTRY EXTERNAL('ILL.EGAL');
      CALL PROC1;
      CALL ALSO_PROC1;
      CALL PROC2;
      END OZS;

      /*======== A SEPARATE MODULE ========*/

      PROC1: PROCEDURE;

      PROC2: ENTRY EXTERNAL('ILL.EGAL'); 
      
      END PROC1;

この例では、入り口定数 PROC1 および PROC2 を明示的に宣言しています。