TYPE

目的

型宣言ステートメント TYPE は、派生型のオブジェクトと関数の型と属性を指定します。 オブジェクトには初期値を割り当てることができます。

構文



>>-TYPE--(--type_name--)--+-----------------------+------------->
                          +-::--------------------+
                          '-,--attr_spec_list--::-'
 
>--entity_decl_list--------------------------------------------><
 
 

それぞれの意味は次のとおりです。


attr_spec
ALLOCATABLE
AUTOMATIC
BIND
DIMENSION (array_spec)
EXTERNAL
INTENT (intent_spec)
INTRINSIC
OPTIONAL
PARAMETER
POINTER
PRIVATE
PROTECTED
PUBLIC
SAVE
STATIC
TARGET
VALUE
VOLATILE

type_name
派生型の名前です。

attr_spec
特定の属性の規則については、その属性と同じ名前を持つステートメントを 参照してください。

intent_spec
INOUT、または INOUT のいずれかです。

::
ダブル・コロン・セパレーターです。 複数の属性を指定する場合、= initialization_expr を使用する場合、

FORTRAN 95 の開始 または =>NULL() FORTRAN 95 の終了entity_decl の一部として使用する場合に、 必要になります。

array_spec
次元境界のリストです。

entity_decl



>>-a--+------------------+-------------------------------------->
      '-(--array_spec--)-'
 
>--+-----------------------------------+-----------------------><
   |                            (1)    |
   '-+-/--initial_value_list--/------+-'
     +- = --initialization_expr------+
     |              (2)              |
     '- => --NULL()------------------'
 
 

注:


  1. IBM 拡張.

  2. Fortran 95.


a
オブジェクト名または関数名です。array_spec は、暗黙のインターフェースを持つ関数に指定することはできません。

+----------------------------------IBM 拡張----------------------------------+

initial_value
直前の名前によって指定されるエンティティーに初期値を与えます。初期化は、DATAの説明のとおりに行われます。

+------------------------------End of IBM 拡張-------------------------------+

initialization_expr
初期化式を使用して、直前の名前によって指定されるエンティティーに初期値を与えます。

+---------------------------------Fortran 95---------------------------------+

=> NULL()
ポインター・オブジェクトに初期値を与えます。

+-----------------------------End of Fortran 95------------------------------+

規則

+---------------------------------Fortran 95---------------------------------+

派生型の定義について、以下のことが該当します。

変数に => を指定する場合、 オブジェクトに POINTER 属性を指定しなければなりません。

+-----------------------------End of Fortran 95------------------------------+

変数に initialization_expr を指定する場合、 オブジェクトに POINTER 属性を指定できません。

型宣言ステートメント中のエンティティーは、 エンティティーに対して指定された属性の規則によって制限されます。 詳細は対応する属性ステートメントを参照してください。

1 度派生型を定義した後は、その派生型を使用して、型宣言ステートメント TYPE を使用するデータ項目を定義することができます。 エンティティーを派生型に明示的に宣言する場合、その派生型は前もって有効範囲単位内で定義しておくか、または 使用関連付けかホスト関連付けによってアクセス可能になっていなければなりません。

データ・オブジェクトは、派生型のオブジェクト構造体 になります。 おのおのの構造体コンポーネント は派生型のオブジェクトのサブオブジェクトです。

DIMENSION 属性を指定すると、データ型が派生型である エレメントを持つ配列が作成されます。

仕様ステートメント以外では、派生型のオブジェクトを実引き数および仮引き数として使用できます。 また、入出力リスト (オブジェクトが、POINTER 属性のコンポーネントを持つ場合を除く)、 割り当てステートメント、構造体コンストラクター、およびステートメント関数定義の右側の項目として、 派生型のオブジェクトを使用することができます。 構造体コンポーネントへのアクセスが不可能な場合、派生型のオブジェクトを入出力リストの中で使用するか、または構造体コンストラクターとして使用することはできません。

非順序派生型のオブジェクトを EQUIVALENCE および COMMON ステートメントのデータ項目として 使用することはできません。 非順序データ型のオブジェクトは整数のポインティング先にはなれません。

非順序派生型の仮引き数は、使用関連付けまたは ホスト関連付けを介してアクセス可能な派生型を指定し、 同じ派生型定義が実引き数と仮引き数の両方を定義していることを確認する必要があります。

型宣言ステートメントは、事実上暗黙の型の規則をオーバーライドします。

オブジェクトが仮引き数、割り振り可能オブジェクト、関数結果、無名共通ブロック内のオブジェクト、整数ポインター、外部名、組み込み名、または自動オブジェクトの場合、そのオブジェクトを型宣言ステートメントの中で初期化することはできません。 AUTOMATIC 属性を持っているオブジェクトも初期化することはできません。 オブジェクトがブロック・データ・プログラム単位内の 名前付き共通ブロックにある場合、 IBM 拡張の開始 またはモジュール内の名前付き共通ブロックにある場合、 そのオブジェクトを初期化することができます。 IBM 拡張の終了

+---------------------------------Fortran 95---------------------------------+

Fortran 95 では、ポインターは初期化することができます。 ポインターを初期化するには、=> NULL() を使用する方法しか ありません。

+-----------------------------End of Fortran 95------------------------------+

インターフェース本体、あるいはサブプログラムの指定部分に宣言式がある 場合、array_spec の宣言式を非定数式にすることができます。この非定数式を使用する宣言オブジェクトのうち、仮引き数または ポインティング先でないものを自動オブジェクト といいます。

1 つの属性を 1 つの型宣言ステートメントの中で繰り返すことはできません。 また、1 つの有効範囲単位内でエンティティーに同じ属性を明示的に複数回与えることもできません。

ステートメントが PARAMETER 属性を 持つときは、initialization_expr を指定する必要があります。宣言するエンティティーが 変数で、initialization_expr FORTRAN 95 の開始 または NULL() FORTRAN 95 の終了を指定した場合は、変数は最初に定義されます。

+---------------------------------Fortran 95---------------------------------+

宣言するエンティティーが派生型のコンポーネントで、initialization_expr または NULL() を指定した場合は、派生型にはデフォルトの初期化があります。

+-----------------------------End of Fortran 95------------------------------+

a は、組み込み割り当ての規則に従って、initialization_expr によって 決まる値により定義されます。 エンティティーが配列である場合は、型宣言ステートメントか、または同じ有効範囲単位内の前の仕様ステートメントで、その配列の形状を指定する必要があります。変数または変数サブオブジェクトを複数回初期化することはできません。a が変数で、initialization_expr FORTRAN 95 の開始 または NULL() FORTRAN 95 の終了 がある場合、a が保管済みオブジェクト (名前付き共通ブロック内のオブジェクトを除く) であることを意味します。 オブジェクトの初期化はオブジェクトの基本的なストレージ・クラスに影響を与える場合もあります。

entity_decl の中で 指定されている array_specDIMENSION 属性の 中の array_spec よりも優先します。

ALLOCTABLE または POINTER 属性を 持たない配列関数の結果は、明示的形状配列の仕様を持つものでなければなりません。

宣言されたエンティティーが関数の場合、アクセス可能な明示インターフェース を持つことはできません。組み込み関数の場合は、この限りではありません。 FUNCTION ステートメントで派生型を指定できますが、 それは、その派生型が関数の本体の中で定義されているか、あるいは、ホスト関連付けまたは使用関連付けを介してアクセスできる場合に限られます。

+----------------------------------IBM 拡張----------------------------------+

事前に定数の名前として定義されている T または F が型 宣言ステートメントにある場合、それは省略された論理定数ではなく 名前付き定数の名前になります。

+------------------------------End of IBM 拡張-------------------------------+

TYPE PEOPLE                      ! Defining derived type PEOPLE
  INTEGER AGE
  CHARACTER*20 NAME
END TYPE PEOPLE
TYPE(PEOPLE) :: SMITH = PEOPLE(25,'John Smith')
END

関連情報

IBM Copyright 2003