英特尔fortran编译错误“这个内部函数在常量表达式中无效”

时间:2013-10-12 23:10:31

标签: compiler-errors fortran intel-fortran

考虑这个简单的程序

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):错误#6263:此内部函数在常量表达式中无效。 [TRANSPOSE]

     

integer :: array(2,3)= transpose(reshape((/ 1,2,3,4,5,6 /),(/ size(array,2),size(array,1)/) ))

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

2 个答案:

答案 0 :(得分:3)

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

使用带有相应ORDER参数的RESHAPE是Fortran 95的一部分,该编译器支持它并且可以提供您想要的等价物:

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

答案 1 :(得分:0)

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

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

它会编译。