英特尔 Fortran 编译错误"This intrinsic function is invalid in constant expressions"



考虑这个简单的程序

program main
implicit none
integer :: array(2,3) = transpose(reshape((/1,2,3,4,5,6/),(/ size(array, 2), size(array, 1) /)))
integer i,j
do i=1,2
   write(*,*) array(i,:)
end do
end program main

当我使用英特尔 Fortran 编译器(版本 13.0.0)进行编译时,出现错误:

main.f90(4):错误 #6263:此内部函数在常量表达式中无效。 [转置]

整数 :: array(2,3) = 转置(reshape((/1,2,3,4,5,6/),(/size(array,

2), size(array, 1)/

)))

似乎转置不能用于常量表达式(?那么有没有办法在定义时初始化数组呢?在我的问题中,数组非常大,因此手动转置不是一种选择。

在初始化表达式(或 F2008 术语中的常量表达式)中使用 TRANSPOSE 是该编译器尚不支持的 Fortran 2003 功能。

使用带有适当 ORDER 参数的 RESHAPE 是 Fortran 95 的一部分,该编译器支持该编译器,并且可以提供您想要的等效内容:

integer :: array(2,3) = reshape([1,2,3,4,5,6], shape(array), ORDER=[2,1])

这意味着你不能在那里定义array。如果你这样做

integer :: array(2,3)
integer :: i,j
array = transpose....

它将编译。

相关内容

最新更新