型宣言

目的

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

構文



>>-type_spec--+-----------------------+--entity_decl_list------><
              +-::--------------------+
              '-,--attr_spec_list--::-'
 
 

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


type_spec attr_spec
  • BYTE (1)
  • CHARACTER [char_selector]
  • COMPLEX [kind_selector]
  • DOUBLE COMPLEX (1)
  • DOUBLE PRECISION
  • INTEGER [kind_selector]
  • LOGICAL [kind_selector]
  • REAL [kind_selector]
  • TYPE (type_name)


注:

  1. IBM 拡張.

type_name
派生型の名前です。

kind_selector



>>-+-(--+-----------+--int_initialization_expr--)-+------------><
   |    '-KIND-- = -'                             |
   |                           (1)                |
   '- * --int_literal_constant--------------------'
 
 


注:


  1. IBM 拡張.


 

関連する型に許されている長さ指定のいずれかを示します。

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

int_literal_constant には、kind 型付きパラメーターは指定できません。

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

char_selector

文字長を指定します。

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

XL Fortranでは、 これは 0 から 256 MB までの文字数です。 256 MB を超える値は 256 MB に (32 ビットで) 設定されます。負の値はゼロに設定されます。値を指定しない場合、デフォルトの長さは 1 です。 kind 型付きパラメーターを指定した場合、値は、ASCII 文字表記を指定する 1 でなければなりません。

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



>>-+-(--+-LEN--=--type_param_value--,--KIND--=--int_init_expr-----+--)-+-><
   |    +-type_param_value--,--+---------+--int_init_expr---------+    |
   |    |                      '-KIND--=-'                        |    |
   |    +-KIND--=--int_init_expr--+-----------------------------+-+    |
   |    |                         '-,--LEN--=--type_param_value-' |    |
   |    '-+--------+--type_param_value----------------------------'    |
   |      '-LEN--=-'                                                   |
   '-*--char_length--+---+---------------------------------------------'
                     '-,-'
 
 

 

type_param_value
宣言式またはアスタリスク (*) です。

int_init_expr
スカラー整数初期化式です。この式は 1 と評価されなければなりません。

char_length
スカラー整数リテラル定数 (この定数は kind 型付きパラメーターを指定することはできません) または括弧で囲んだ type_param_value のいずれかです。

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

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

::
ダブル・コロン・セパレーターです。 属性 =initialization_exprFORTRAN 95 の開始 または => NULL() FORTRAN 95 の終了を指定するときは、ダブル・コロン・セパレーターを使用します。

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

entity_decl



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


注:


  1. IBM 拡張

  2. Fortran 95


 

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

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

char_length
kind_selector および char_selector で指定した長さをオーバーライドします。 これは、初期キーワードによる長さ指定が可能なステートメント内でのみ許可されます。 上で定義したように、文字エンティティーは、char_length を指定することができます。 文字以外のエンティティーは、関連する型に認められている長さ指定の 1 つを示す整数リテラル定数のみを 指定することができます。

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

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

initial_value
直前の名前によって指定されるエンティティーに初期値を与えます。

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

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

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

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

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

規則

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

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

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

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

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

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

型宣言ステートメントは、事実上暗黙の型の規則をオーバーライドします。 組み込み関数の型を確認する型宣言ステートメントを 使用することができます。型 宣言ステートメントの中に組み込み関数の総称名または特定名が 使用されていても、その名前は組み込み関数の特性を失うことはありません。

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

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

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

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

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

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 よりも優先します。

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

宣言されたエンティティーが関数の場合、アクセス可能な明示インターフェース を持つことはできません。組み込み関数の場合は、この限りではありません。

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

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

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

ステートメント内にダブル・コロン・セパレーター (::) がない場合にのみ、CHARACTER 型宣言ステートメントの char_length の後にオプションのコンマを入れることができます。

CHARACTER 型宣言ステートメントがモジュール、ブロック・データ・プログラム単位、またはメインプログラムの 有効範囲にあり、エンティティーの長さを継承されるものとして指定する場合、そのエンティティーは名前付き文字定数の名前で なければなりません。 文字定数は PARAMETER 属性に定義される対応する式の長さになります。

CHARACTER 型宣言ステートメントがプロシージャーの 有効範囲にあり、エンティティーの長さが継承される場合、 そのエンティティーの名前は仮引き数または名前付き文字定数の名前で なければなりません。 ステートメントが外部関数の有効範囲にある場合、そのステートメントを 同じプログラム単位内の FUNCTION または ENTRY ステートメント内の関数名または入り口名にすることができます。 エンティティー名が仮引き数の名前の場合、 仮引き数はプロシージャーを参照するために、 関連する実際の引き数の長さを受け入れます。 エンティティー名が文字定数の名前と同じ場合、文字定数 は PARAMETER 属性が定義する対応した式の長さを受け入れます。 エンティティー名が関数名または入り口名と同じ場合、 エンティティーは呼び出し側の有効範囲単位内で指定されている長さを受け入れます。

文字関数の長さは、関数の型がインターフェース・ブロックで宣言されて いない場合は定数式でなければならない宣言式になり、ダミー・プロシージャー名の長さを示す場合はアスタリスクになります。 内部関数、モジュール関数、または再帰的関数の場合、または関数が 配列またはポインティング値を返す場合、長さにアスタリスクを使う ことはできません。

      CHARACTER(KIND=1,LEN=6) APPLES /'APPLES'/
      CHARACTER*7, TARGET :: ORANGES = 'ORANGES'
      CALL TEST(APPLES)
      END
 
      SUBROUTINE  TEST(VARBL)
        CHARACTER*(*), OPTIONAL :: VARBL   ! VARBL inherits a length of 6
 
        COMPLEX, DIMENSION (2,3) :: ABC(3) ! ABC has 3 (not 6) array elements
        REAL, POINTER :: XCONST
 
        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