是否可以在子程序中分配公共数组的大小和值,然后从程序的其他子程序中使用它?
以下程序不起作用,但我想做这样的事情:
main.f
program main
integer n
integer, allocatable :: co(:)
common n, co
call assign
print *, co(1), co(2)
deallocate(co)
stop
end program main
assign.f
subroutine assign
integer n
integer, allocatable :: co(:)
common n, co
n = 2
allocate(co(n))
co(1) = 1
co(2) = 2
return
end subroutine assign
答案 0 :(得分:5)
没有。您可以将指针放入常用,但不能分配。
原因在于,共同的基本概念是存储关联,您可以在其中创建所有共同事物的连续序列,然后这些序列在范围之间共享。 Allocatables的大小可以在一个范围内动态变化,这将使得在可分配之后的公共块中的事物序列中的跟踪相当困难。
(可分配的典型实现意味着与allocatable直接关联的存储只是一个描述符 - 实际数据保存在其他地方。这实际上打破了连续的存储单元序列的概念,假设分配状态(如记录的那样)在描述符中)和数据都是可分配值的一部分。指针的实现是类似的,但从概念上讲,内存中其他地方的数据不是指针值的一部分,所以不应该预期出现在公共描述的连续序列中 - 指针在序列中,但不在它指向的位置。)
Allocatables需要F90。这意味着您可以使用模块变量 - 这是比使用常用数据更好的解决方案。如果必须使用common执行此操作,请使用数据指针。