PROTECTED (Fortran 2003)

用途

PROTECTED 属性允许对模块实体的修改进行更大的控制。 如果同一模块同时定义了过程和实体,则模块过程只能修改受保护的模块实体或其子对象。

语法

PROTECTED 属性必须仅出现在模块的规范部分中。

读取语法图跳过可视语法图PROTECTED ::实体声明列表
entity
不在公共块中的命名变量。

规则

如果指定由 EQUIVALENCE 语句声明的对象具有 PROTECTED 属性,那么该 EQUIVALENCE 语句中指定的所有对象都必须具有 PROTECTED 属性。

无法定义具有通过使用关联访问的 PROTECTED 属性的非指针对象。

不得为 整数指针指定 PROTECTED 属性。

具有通过使用关联访问的 PROTECTED 属性的指针对象不得显示为下列任何一项:
表 1. 与 PROTECTED 属性兼容的属性
ALLOCATABLE 1 INTENT SAVE
ASYNCHRONOUS OPTIONAL 静态 3
自动 3 POINTER TARGET
连续 2 PRIVATE VOLATILE
DIMENSION PUBLIC  
注意:
  • 1 Fortran 2003
  • 2 Fortran 2008
  • 3 IBM 扩展

示例

在以下示例中,ageval 的值只能由声明它们的模块中的子例程进行修改:
      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

相关信息