目的
DATA ステートメントは変数に初期値を与えます。
構文
.-+---+--------------------------------------. | '-,-' | V | >>-DATA----data_object_list--/--initial_value_list--/-+-------->< |
>>-(--do_object_list--,--do_variable-- = -----------------------> >--integer_expr1--,--integer_expr2--+------------------+--)---->< '-,--integer_expr3-'
>>-+--------+--data_value-------------------------------------->< '-r-- * -'
負でないスカラー整数定数です。 r が名前付き定数の場合、これは有効範囲単位内で事前に宣言されているか、 あるいは使用関連付けまたはホスト関連付けによってアクセス可能にされている必要があります。
+---------------------------------Fortran 95---------------------------------+
また、r は、定数の負ではないスカラー整数サブオブジェクトです。 上記と同様に、これが名前付き定数のサブオブジェクトである場合も、 有効範囲単位内で事前に宣言されているか、あるいは使用関連付けまたはホスト関連付けによって アクセス可能にされている必要があります。
+-----------------------------End of Fortran 95------------------------------+
r が定数のサブオブジェクトの場合、 その中の添え字はどれも初期化式です。 r を省略すると、デフォルト値は 1 になります。 r*data_value という形式はデータ値 を r 回連続して指定するのと同じです。
規則
data_object としてポインターでない配列オブジェクトを指定することは、 配列オブジェクト内のすべてのエレメントのリストを格納された順に指定する ことと同じです。
+---------------------------------Fortran 95---------------------------------+
ポインター属性を持つ配列は、 1 つだけの対応する初期値 NULL() を持ちます。
+-----------------------------End of Fortran 95------------------------------+
各 data_object_list は対応する initial_value_list と 同じ数の項目を指定しなければなりません。 これらの 2 つのリストの項目は互いに 1 対 1 の対応をとります。 この対応によって、それぞれの data_object の初期値が決定します。
+---------------------------------Fortran 95---------------------------------+
ポインターの初期化の場合、data_value が NULL() であれば、 対応する data_object はポインター属性を持つことになります。 data_object がポインター属性を持つと、 対応する data_value は NULL() になるはずです。
+-----------------------------End of Fortran 95------------------------------+
initial_value による各 data_object の定義は、 型なし定数の使用方法に記載している項目以外は組み込み割り当ての規則に 従います。
initial_value が構造体コンストラクターの場合、 各コンポーネントは初期化式でなければなりません。 data_object が変数の場合、 サブストリング式、添え字式、ストライド式は初期化式でなければなりません。
data_value が名前付き定数または名前付き定数のサブオブジェクトの場合、その名前付き定数は、有効範囲単位内で事前に宣言されているか、あるいはホスト関連付けまたは使用関連付けによってアクセス可能にされている必要があります。 data_value が構造体コンストラクターの場合、その派生型は、有効範囲単位内で事前に宣言されているか、あるいはホスト関連付けまたは使用関連付けによってによってアクセス可能にされている必要があります。
長さがゼロの文字変数はリストに変数を 1 つ与えますが、サイズが ゼロの配列、反復カウントがゼロの暗黙 DO リスト、および 反復係数がゼロの値は拡張 initial_value_list に何の値も 与えません。
DATA ステートメント内で暗黙 DO リストを 使用して配列エレメント、スカラー構造体コンポーネントおよびサブストリングを初期化できます。 暗黙 DO 変数の制御の下で、暗黙 DO リストは スカラー構造体コンポーネント、配列エレメント、およびサブストリングの順序列に拡張されます。 配列エレメントおよびスカラー構造体コンポーネントは、定数である親を持つ ことはできません。 スカラー構造体コンポーネントはそれぞれ、添え字リストを指定するコンポーネントの参照を、 少なくとも 1 つは含んでいなければなりません。
暗黙 DO リストの範囲は do_object_list です。 DO ステートメントと同様に、反復カウントおよび暗黙 DO 変数の値は、integer_expr1、 integer_expr2、および integer_expr3 によって 確立されます。 暗黙 DO が実行されると、 暗黙 DO が 1 回繰り返されるごとに、do_object_list 内の項目が指定され、 その暗黙 DO 変数のその時点の値に応じた適切な値が 割り当てられます。 暗黙 DO 変数の反復カウントがゼロの場合、拡張順序列には 何の変数も追加されません。
do_object 内の添え字式には、定数か、またはその範囲内に 添え字式を持つ暗黙 DO リストの暗黙 DO 変数 だけを入れることができます。 各処理は組み込み型でなければなりません。
+----------------------------------IBM 拡張----------------------------------+
論理定数を持つ論理タイプのリスト項目を初期化する場合、 省略形を使用することができます (.TRUE. の場合 T、 .FALSE. の場合 F)。 T または F が PARAMETER 属性によって事前に定義された定数名の場合、XL Fortran はそれを名前付き定数として認識し、その値を DATA ステートメント内の対応するリスト項目に 割り当てます。
+------------------------------End of IBM 拡張-------------------------------+
ブロック・データ・プログラム単位では、DATA ステートメント または型宣言ステートメントを使用して初期値を名前付き共通ブロック 内の変数に割り当てることができます。
内部またはモジュール・サブプログラムでは、data_object が ホスト内のエンティティーと同じ名前を持ち、かつ内部サブプログラム内の 他の仕様ステートメントで data_object が宣言されていない 場合、DATA ステートメントの前では data_object を 参照することも定義することもできません。
DATA ステートメントは以下のものに初期値を割り当てることは できません。
実行可能プログラム内では何度も変数を初期化することはできません。 複数の変数を共用する場合、データ・オブジェクトのうち 1 つだけを 初期化できます。
例
例 1:
INTEGER Z(100),EVEN_ODD(0:9) LOGICAL FIRST_TIME CHARACTER*10 CHARARR(1) DATA FIRST_TIME / .TRUE. / DATA Z / 100* 0 / ! Implied-DO list DATA (EVEN_ODD(J),J=0,8,2) / 5 * 0 / & & ,(EVEN_ODD(J),J=1,9,2) / 5 * 1 / ! Nested example DIMENSION TDARR(3,4) ! Initializes a two-dimensional array DATA ((TDARR(I,J),J=1,4),I=1,3) /12 * 0/ ! Character substring example DATA (CHARARR(J)(1:3),J=1,1) /'aaa'/ DATA (CHARARR(J)(4:7),J=1,1) /'bbbb'/ DATA (CHARARR(J)(8:10),J=1,1) /'ccc'/ ! CHARARR(1) contains 'aaabbbbccc'
例 2:
TYPE DT INTEGER :: COUNT(2) END TYPE DT TYPE(DT), PARAMETER, DIMENSION(3) :: SPARM = DT ( (/3,5/) ) INTEGER :: A(5) DATA A /SPARM(2)%COUNT(2) * 10/
関連情報