2011-03-09 99 views
1

根据Fortran标准信息,我可以找到(F77,F90/95)数组声明符,其中没有下限假定此下限为1。上限需要大于或等于下限,这会使得不允许以下语句:Fortran中的数组声明符,没有下限和上限0

INTEGER A(0) 

但是,我不能让ifort,也不以任何方式有关声明gfortran抱怨。编译器不需要将其标记为错误?

回答

5

由于上限需要大于或等于下限,因此不允许使用以下语句。

从Fortran的2008标准:

5.3.8.2显式形状的数组
[...] 3各自下限和上限的值确定的范围该阵列沿着特定维度,因此也是该维度中阵列的范围。如果出现下界,则它会出现下界;否则下限为1.下限或上限的值可以是正数,负数或零。该维度中数组的下标范围是包含下限和上限之间的整数值集合,前提是上限不小于下限。 如果上限小于下限,则范围为空,该维度中的范围为零,且该数组的大小为零。

+0

thnx!但是,我没有在F77和F90/95规范中找到特定的最后一句话,我抬头......呃,我会接受这个答案,假设它并不太重要,并且显然在后来的标准中这是允许的。 – steabert 2011-03-09 21:18:54

+0

它在F90和F95中。只有F77明确禁止上限小于下限。 – eriktous 2011-03-09 23:11:26

+0

Thnx,然后我的资料来源,毕竟只提及F77。但是,带有-std = legacy的gfortran不会投诉。 – steabert 2011-03-10 16:51:27

1

这已经有一段时间,因为我编码FORTRAN,但我似乎记得,如果只有一个号码被提供时,它给该数组的长度(与下限和上限隐含成为1和length)。所以你的代码创建一个零长度的数组。

+0

是的,这的确会意味着我的发言等同于'整数(1:0)',但我的问题是,编译器不会介意。即使'INTEGER A(10:0)'也被接受。唯一的问题是,当你尝试访问这样一个数组时,它总会给出一个超出界限的错误。 – steabert 2011-03-09 19:28:58

+0

@steabert:我认为你指出,因为等价性成立。但是你可以尝试将'INTEGER A(lower,upper)'看作“A'是一个没有低于'lower'的数组是合法的数组,并且没有高于'upper'的索引是合法的。如果'lower> upper',那么没有索引是合法的,就像你说的那样。但是,有零长度的数组是完全有效的理由。考虑例如一个将整数数组作为参数的函数,并且应该返回满足特定标准的所有整数。如果没有找到这样的整数,则返回一个零长度的数组是很自然的事情。 – 2011-03-09 19:34:06

+0

如果只给出一个数字,我认为它不应该被认为是指定长度。这个数字也可能是负数。 – eriktous 2011-03-09 23:17:16