我现在正在尝试更新包含 (*) 等行的旧 Fortran 代码
allocate( a(2), b(2) )
a(:) = 0.0
b(:) = 0.0
最初,我将它们更改为
allocate( a(2), source=0.0 )
allocate( b(2), source=0.0 )
但这显然不是很简单。所以我试着把它们结合起来
allocate( a(2), b(2), source=0.0 ) !! (1)
我没想到它会起作用,但它实际上适用于 gfortran >=4.8 和 Sun fortran 8.7(而不适用于 ifort-14)。所以我浏览了F2003和F2008文档的 ALLOCATE 部分,似乎在 F2008 中删除了“如果出现 SOURCE=,则分配列表应仅包含一个分配对象”的限制。这是否意味着上述第 1 行在 F2008 中没有问题,而不同的行为仅仅是由于 F2008 的支持程度不同?
(*) 在实际代码中,我试图分配派生类型的几个数组组件,allocate( conf% crd(3,N), conf% vel(3,N), conf% frc(3,N), blah, blah,... )
同时为每个组件分配零。所以我想知道是否可以稍微简化这些行。