私有

用途

PRIVATE 属性指定无法通过使用关联在模块外部访问模块实体。

语法

读取语法图跳过可视语法图PRIVATE ::access_id_list
access_id
是通用规范或是变量、过程、派生类型、常量或列表组的名称

规则

PRIVATE 属性只能显示在模块的作用域中。

虽然模块中可能出现多个 PRIVATE 语句,但只能包含一个省略 access_id_list的语句。 没有 access_id_listPRIVATE 语句为模块中所有可能可访问的实体设置专用的缺省辅助功能选项。 如果模块包含此类语句,那么它不得包含没有 access_id_listPUBLIC 语句。 如果模块不包含没有 access_id_listPRIVATE 语句,那么缺省辅助功能选项为 public。 未显式指定辅助功能选项的实体具有缺省可访问性。

具有公共标识的过程可通过该标识进行访问,即使其特定标识是专用标识也是如此。 如果模块过程包含类型具有专用可访问性的私有哑参数或函数结果,则必须将模块过程声明为具有专用可访问性,并且不得具有具有公共可访问性的通用标识符。 派生类型的可访问性不影响其组件或过程的可访问性,也不受其影响。

如果名称列表组包含任何专用的对象或包含专用组件,那么名称组列表必须是专用的。 如果子程序的任何参数都是专用的派生类型,那么该子程序必须是专用的。 如果函数的结果变量是专用派生类型,那么该函数必须是专用函数。

表 1. 与 POINTER 属性兼容的属性
ALLOCATABLE 1 INTRINSIC SAVE
ASYNCHRONOUS PARAMETER 静态 3
连续 2 POINTER TARGET
DIMENSION 受保护 1 VOLATILE
EXTERNAL    
注意:
  • 1 Fortran 2003
  • 2 Fortran 2008
  • 3 IBM 扩展

示例

MODULE MC
   PUBLIC                     ! Default accessibility declared as public
   INTERFACE GEN
      MODULE PROCEDURE SUB1, SUB2
   END INTERFACE
   PRIVATE SUB1               ! SUB1 declared as private
   CONTAINS
      SUBROUTINE SUB1(I)
         INTEGER I
         I = I + 1
      END SUBROUTINE SUB1
      SUBROUTINE SUB2(I,J)
         I = I + J
      END SUBROUTINE
END MODULE MC

PROGRAM ABC
   USE MC
   K = 5
   CALL GEN(K)                ! SUB1 referenced because GEN has public
                              ! accessibility and appropriate argument
                              ! is passed
   CALL SUB2(K,4)
   PRINT *, K                 ! Value printed is 10
END PROGRAM

相关信息