我的子程序中有以下代码:
character x*256 ,y*80 common /foo/ x ,y(999)
好吧,我实际上并没有写这个 . 所以我不明白这里的尺寸 . y 是一个包含80个字符长字符串的999元素宽数组吗?
y
如果是这样,如何在没有公共块的情况下在Fortran 90中正确定义?
我首先要说的是你拥有的代码是“正确的”Fortran 90,但我同意你想要摆脱常见的阻塞 .
基本上,没有任何具体的声明的性质 . 每当
<type> A common /foo/ A(<size>)
使用A的声明有两个部分,以及常见的关联:类型和维度 . 忽略关联,允许在 common 语句中声明维度,上面就是这样的
common
<type> A dimension A(<size>)
这反过来也是如此
<type>, dimension(<size>) :: A
来到具体示例,类型是长度为80的字符 . 您的非常见声明就是
character(len=80), dimension(999) :: y
实际上, y 是一个大小为999的排名为1的数组,长度为80个字符 . y(10) 是标量长度为80的字符(数组的第10个元素 y ) .
y(10)
x(10) 语法不正确,因为 (10) 是数组索引,而 x 是标量 . 对于子字符串,需要不同的索引 . x(10:10) 是字符变量 x 的第10个字符; y(10)(10:10) 是字符数组 y 的第10个元素的第10个字符 .
x(10)
(10)
x
x(10:10)
y(10)(10:10)
1 回答
我首先要说的是你拥有的代码是“正确的”Fortran 90,但我同意你想要摆脱常见的阻塞 .
基本上,没有任何具体的声明的性质 . 每当
使用A的声明有两个部分,以及常见的关联:类型和维度 . 忽略关联,允许在
common
语句中声明维度,上面就是这样的这反过来也是如此
来到具体示例,类型是长度为80的字符 . 您的非常见声明就是
实际上,
y
是一个大小为999的排名为1的数组,长度为80个字符 .y(10)
是标量长度为80的字符(数组的第10个元素y
) .x(10)
语法不正确,因为(10)
是数组索引,而x
是标量 . 对于子字符串,需要不同的索引 .x(10:10)
是字符变量x
的第10个字符;y(10)(10:10)
是字符数组y
的第10个元素的第10个字符 .