【问题标题】:Conventions for fortran90 or gfortran - Declaration of integer, real, double and arrayfortran90 或 gfortran 的约定 - 整数、实数、双精度和数组的声明
【发布时间】:2018-02-27 06:07:30
【问题描述】:

我想了解有关 Fortran90 或 gfortran 中的声明的说明。

首先,对于声明整数和双精度,似乎约定是:

! i is an integer
integer::i 

而我也看到了一个简单的声明,例如(在我的代码中,我使用了这个):

! i is an integer
integer i 

即没有“::”符号。

这个声明的规范是什么(integer, real, double)?

声明数组也一样吗?即,符号 '::' 是否必须像以下声明一样:

! declaration of array "list" with 10 elements
double precision,dimension(10)::list

我为数组寻找更简单的声明,但没有成功。

最后,我还对可分配数组使用了以下语法:

! Arrays 
double precision, allocatable :: x(:,:)
! Allocation of 2D Array
allocate(x(1:size_x,1:size_y))

声明可分配数组是最近的方式(我的意思是 Fortran 中最近的约定或规范)吗?

问候

ps:我不太清楚fortran不同版本的演变过程(例如fortran90gfortran之间的区别

【问题讨论】:

  • Fortran90(如 FORTRAN77、Fortran2003、Fortran2008)是一个版本,而 gfortran(GNU Fortran) 是一个编译器(如 ifort -Intel Fortran-、pgfortran -PGI Fortran- ...)

标签: arrays fortran gfortran fortran90 variable-declaration


【解决方案1】:

在变量声明中,:: 是必需的,原因有两个:

  • 声明语句中有属性列表;
  • 语句中有显式初始化。

我们第一次看到这样的

integer, dimension(5) :: i
integer, target :: j

第二次

integer :: k=1

在可选/不需要时使用:: 是无害的。虽然令牌在 F90 之前的 Fortran 标准中无效。

最后,请注意integer i(5) 不需要::。我已经看到建议始终使用 :: 以保持一致性并节省学习/应用规则的精力。

【讨论】:

  • 关于 OP 的最后一个问题,您能否提及供应商和标准版本之间的差异?
  • 不,我认为 OP 混淆了 gfortran 和 fortran 90。一个是供应商,另一个是指 Fortran 标准。或者他们不确定 gfortran 支持哪些标准? @youpilat13 可能需要澄清一下。
  • @francescalus 我问这个问题是因为我使用编译器“mpif90”,即 fortran 中的 MPI(消息传递接口)库,所以我得出结论,我必须尊重 fortran90 约定。作为结论,根据我上面所说的,您是否建议我为数组声明设置或取消设置“::”?
  • 在你的两个数组示例中,@youpilat13,::s 是强制性的。这是从属性项得出的。您可以将第一个表述为 double precision list(10) 而没有(我可能会 - 除了使用 real(..)),但这主要是风格和个人喜好。
  • 作为一种风格偏好,我建议始终使用 :: 无论是否必要。没有 :: 的样式来自 FORTRAN 77 或更早版本 - 如果您所做的只是声明类型,它仍然有效,但是“老式”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
相关资源
最近更新 更多