回 帖 发 新 帖 刷新版面

主题:[讨论]data给数组赋初值遇到的问题


program ex_20111111
  implicit none
  integer(4) :: a(5)
    data a(1:3) /3*1/
    data a(1:4) /-1,-1,-1,2/
 end
在这个程序里面,后一个data赋值不是应该把前面一个覆盖了吗?
为何我编译之后,却显示
a(1)   1
a(2)   -1
………………
奇怪的是a(1) 却没有被覆盖[/color],其他都很正常。
这是为什么?

回复列表 (共5个回复)

沙发

语法规定:阁下缩写程序段是 Bug。

板凳


谢谢,我知道正常情况下不会这么写,只是试验一下。
您的意思就是说,第一个数据不会被覆盖掉?是什么造成的呢?
我刚接触fortran,求指点!

3 楼

对 A(1 : 3) 而言,编译器有任意选择一个 Data Statement 对其初始化的权利,也就是说,是 Compiler Dependent 的。这就是 Bug 的来源之一。

4 楼


谢谢。
既然编译器有任意选择一个 Data Statement 对其初始化的权利,那么A(1)是1,也就是选择了第一个data statement,
那么为何A(2),A(3),A(4)都是由第二个data statement赋初值的?

5 楼

A(1 : 3) 可以独立、随机地选择任何一个初始化;这样的语句对特定的 Compiler 来研究,没有任何含义,关键是要知道 Fortran 标准如何说 --- A variable, or part of a variable, shall not be explicitly initialized more than once in a program. 所以严格说起来,您的程序是 错误 的,只不过一些编译器有扩展,在 某种程度上允许您的错误,也就是有了 Bug;但你开 标准检测,就会出来 Warning。

我来回复

您尚未登录,请登录后再回复。点此登录或注册