PROTECTED (Fortran 2003)
用途
PROTECTED 属性允许对模块实体的修改进行更大的控制。 如果同一模块同时定义了过程和实体,则模块过程只能修改受保护的模块实体或其子对象。
语法
规则
如果指定由 EQUIVALENCE 语句声明的对象具有 PROTECTED 属性,那么该 EQUIVALENCE 语句中指定的所有对象都必须具有 PROTECTED 属性。
无法定义具有通过使用关联访问的 PROTECTED 属性的非指针对象。
不得为 整数指针指定 PROTECTED 属性。
具有通过使用关联访问的 PROTECTED 属性的指针对象不得显示为下列任何一项:
- 作为 NULLIFY 语句或 POINTER 赋值语句中的指针对象
- 作为 ALLOCATE 或 DEALLOCATE 语句中的可分配对象。
- 作为引用过程的实际自变量,如果关联的哑元自变量是具有 INTENT(INOUT) 或 INTENT(OUT) 属性的指针。
示例
在以下示例中,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