【发布时间】:2018-11-20 21:49:53
【问题描述】:
在 Fortran 中分配零大小的数组时,我遇到了违反直觉的行为。
这段代码:
program test_zerosized
implicit none
integer, allocatable :: a(:),b(:)
allocate(a(0))
print *, ' a lower bound = ',lbound(a,1)
print *, ' a upper bound = ',ubound(a,1)
allocate(b(0:0))
print *, ' b lower bound = ',lbound(b,1)
print *, ' b upper bound = ',ubound(b,1)
return
end program test_zerosized
产生以下输出:
a lower bound = 1
a upper bound = 0
b lower bound = 0
b upper bound = 0
我的编译器 (gcc/gfortran 6.2.0) 是否符合标准?我不明白为什么 lbound(a,1)==1 而不是 lbound(a,1)==0,因为总数组大小为零元素。谢谢!
【问题讨论】:
-
好吧,如果 Lbound( a ) = 0 且 Ubound( a ) = 0 它的大小不是零,则有 1 个元素,即 a( 0 )
标签: arrays fortran bounds allocatable-array