考虑这个简单的程序
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
当我使用intel fortran编译器(版本13.0.0)进行编译时,出现错误:main.f90(4): error #6263: This intrinsic function is invalid in constant expressions. [TRANSPOSE]
integer :: array(2,3) = transpose(reshape((/1,2,3,4,5,6/),(/ size(array, 2), size(array, 1) /)))
似乎转置不能用于常量表达式(?)。那么有没有一种方法可以在定义时初始化数组?在我的问题中,数组非常大,因此无法手动转置。
最佳答案
在初始化表达式(或F2008术语中的常量表达式)中使用TRANSPOSE是该编译器尚不支持的Fortran 2003功能。
RESHAPE和适当的ORDER参数一起使用是Fortran 95的一部分,该编译器支持该功能,并且可以提供与您想要的功能等效的功能:
integer :: array(2,3) = reshape([1,2,3,4,5,6], shape(array), ORDER=[2,1])
关于compiler-errors - 英特尔fortran编译错误 “This intrinsic function is invalid in constant expressions”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19340147/