Fortran中的(real(ra))变量声明

时间:2012-11-14 13:14:48

标签: variables fortran declaration

我正在尝试阅读用Fortran 90编写的代码。在变量声明中,它有例如:

real(ra) :: X

我无法找到此代码中ra可以引用的内容。我以为它会像real(kind=8)那样有人向我解释这个吗?

1 个答案:

答案 0 :(得分:3)

real(ra) :: X

就像

real(kind=8)

实际上如果ra = 8就是一样的! kind =在这里是可选的。

至于找到它将是一个参数。它可能与上面的声明处于相同的例程中,它可能位于例程使用的模块中,或者我认为它可能位于例程中包含的文件中。可能有不同的选择,但它会以某种方式在范围内。

那么为什么不使用第二种形式呢?这是因为种类数不可移植,并且因编译器而异 - 例如

[luser@cromer stackoverflow]$ cat kind.f90 
Program real_kinds

  Implicit None

  Real( 8 ) :: a

End Program real_kinds
[luser@cromer stackoverflow]$ gfortran kind.f90 
[luser@cromer stackoverflow]$ nagfor kind.f90
NAG Fortran Compiler Release 5.3.1 pre-release(904)
Warning: kind.f90, line 7: Unused local variable A
Error: kind.f90, line 5: KIND value (8) does not specify a valid representation method
Errors in declarations, no further processing for REAL_KINDS
[NAG Fortran Compiler error termination, 1 error, 1 warning]

因此,最好使用使用selected_real_kind内在函数初始化的参数来指定类型:

[luser@cromer stackoverflow]$ cat kind.f90 
Program real_kinds

  Implicit None

  Integer, Parameter :: wp = Selected_real_kind( 12, 70 )

  Real( wp ) :: a

  Write( *, * ) Kind( a )

End Program real_kinds
[luser@cromer stackoverflow]$ gfortran kind.f90
[luser@cromer stackoverflow]$ ./a.out
           8
[luser@cromer stackoverflow]$ nagfor kind.f90
NAG Fortran Compiler Release 5.3.1 pre-release(904)
[NAG Fortran Compiler normal termination]
[luser@cromer stackoverflow]$ ./a.out
 2

可能会做你想要的。 <_p>是selected_real_kind的常见替代方法

Integer, Parameter :: wp = Kind( 1.0d0 )

总而言之,它是相同的,更好的是,如果仔细地做,它更便携。

(最后我真的应该说,有些值与用于存储变量的字节数无关)