При выделении массивов нулевого размера в Фортране я получаю противоречивое поведение.
Этот код:
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
, так как общий размер массива равен нулю элементов.Спасибо!