我的子程序中有以下代码:
character x*256 ,y*80
common /foo/ x ,y(999)
好吧,我实际上并没有写这个。所以我不了解这里的尺寸。是y
一个 999 元素宽的 80 个字符的长字符串数组吗?
如果是这样,我如何在没有公共块的情况下在 Fortran 90 中正确定义它?
我的子程序中有以下代码:
character x*256 ,y*80
common /foo/ x ,y(999)
好吧,我实际上并没有写这个。所以我不了解这里的尺寸。是y
一个 999 元素宽的 80 个字符的长字符串数组吗?
如果是这样,我如何在没有公共块的情况下在 Fortran 90 中正确定义它?
我首先要说您拥有的代码是“正确的”Fortran 90,但我同意希望摆脱常见的块。
本质上,声明的性质没有什么特别之处。每当
<type> A
common /foo/ A(<size>)
使用 A 的声明有两部分,以及常见的关联:类型和维度。忽略关联,common
允许在声明中声明维度,上面就像
<type> A
dimension A(<size>)
这又与
<type>, dimension(<size>) :: A
来看具体示例,类型是长度为 80 的字符。您的非常见声明将简单地是
character(len=80), dimension(999) :: y
那么,确实y
是一个大小为 999、长度为 80 个字符的 rank-1 数组。 y(10)
是一个长度为 80 的标量字符(数组的第 10 个元素y
)。
x(10)
不是正确的语法,因为它(10)
是数组索引,并且x
是一个标量。对于子字符串,需要不同的索引。 x(10:10)
是字符变量的第 10 个字符x
;y(10)(10:10)
是字符数组的第 10 个元素的第 10 个字符y
。