+----------------------------------IBM 拡張----------------------------------+
目的
PROTECTED 属性によって、モジュール・エンティティーの変更をより大きく制御できます。モジュール・プロシージャーが、保護モジュール・エンティティーまたはそのサブオブジェクトを変更できるのは、同じモジュールがプロシージャーとエンティティーの両方に定義されている場合のみです。
構文
PROTECTED 属性は、モジュールの仕様部分にしか指定できません。
>>-PROTECTED--+----+--entity_declaration_list------------------>< '-::-' |
規則
EQUIVALENCE ステートメントによって宣言されたオブジェクトが PROTECTED 属性を持つように指定した場合、その EQUIVALENCE ステートメントで指定されたオブジェクトはすべて PROTECTED 属性を持たなければなりません。
使用関連付けを介してアクセスされる、PROTECTED 属性を持つ非ポインター・オブジェクトは定義できません。
PROTECTED 属性を整数ポインターに指定してはなりません。
使用関連付けを介してアクセスされる、PROTECTED 属性を持つポインター・オブジェクトを以下で指定してはなりません
PROTECTED 属性と互換性のある属性 | ||||
---|---|---|---|---|
|
例
次の例で、age と val の両方の値は、これらが宣言されているサブルーチンによってのみ変更できます。
module mod1 integer, protected :: val integer :: age protected :: age contains subroutine set_val(arg) integer arg val = arg end subroutine subroutine set_age(arg) integer arg age = arg end subroutine end module program dt_init01 use mod1 implicit none integer :: value, his_age call set_val(88) call set_age(38) value = val his_age = age print *, value, his_age end program
関連情報
+--------------------------------IBM 拡張の終り-------------------------------+