首页 > 解决方案 > 派生类型的空数组

问题描述

如何正确编写用户派生类型的空数组文字?

以下适用于 GFortran,但不适用于 IFort 版本 19.1.1.217

 type(SpinOrbIdx_t), allocatable :: det_I(:)
det_I = [SpinOrbIdx_t::]

这是 ifort 中的错误,还是 GFortran 的不符合标准的行为?

标签: fortrangfortranintel-fortran

解决方案


这确实是声明构造(零大小)数组类型的正确语法。英特尔 Fortran 拒绝将此作为 Fortran 2003+ 语法是错误的:您应该将此报告给英特尔支持。

在 Fortran 2018 中,这是语法规则 R770(带有 R769 和其他上下文)。

作为一种解决方法,您可以分配det_I为零大小或使用没有元素的结构构造函数的数组构造函数:

allocate(det_I(0))
det_I = [(SpinOrbIdx(...),i=1,0)]  ! For appropriate structure constructor, etc.

推荐阅读