2012-01-06 168 views
0

快速问题。 我有一个子程序FORTRAN77用变量声明Fortran变量类型转换

DIMENSIONS HH(13, 1000) 

我假定因为没有指定类型,该变量是一个整数数组。在稍后的节目,我有一个循环,其中有如下一行:

HH(2,N) = HH(4,N) + W2 

W2未明确在子程序中声明,也不是作为参数传递。我假设它是默认的类型作为一个真正的变量。

我想对于上面的命令,W2在它被添加到HH(4,N)之前转换为整数。它是否正确?

道歉,如果这是非常基本的。

+0

出于兴趣,您为什么认为代码的一部分中的隐式类型变量将是'INTEGER',而另一部分代码中的另一个隐式类型变量将是'REAL'? – talonmies 2012-01-06 05:37:10

+0

我读到fortran变量的默认类型是真实的,除非变量名以“I”和“N”之间的字母开头。而且因为我是个傻瓜,所以HH落入这个范围并想知道Fortran如何处理假定的类型转换,所以我可以用C#复制它。但你排除了我的困惑:o) – 2012-01-06 05:46:14

回答

2

在Fortran 77中,除非另有定义,否则以I,J,K,L,M或N开始的变量隐含地为INTEGER。所有其他变量隐含地为REAL。这意味着你的阵列HH是REAL。所以结果

HH(2,N) = HH(4,N) + W2 

REAL不涉及隐式投射。

+0

doh!当然。似乎我不知道我的字母表......谢谢! – 2012-01-06 05:36:50

+5

即使在Fortran 2008中,这仍然适用!这就是强烈建议使用“隐式无”的原因,因此如果忘记显式键入变量,隐式类型将不适用。或者对于相同的效果使用编译器选项,例如gfortran的-fimplicit-none。 – 2012-01-06 07:28:24