compiler-errors - 英特尔fortran编译错误 “This intrinsic function is invalid in constant expressions”

标签 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): 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/

相关文章:

java - 曲面 View 不起作用

fortran - Fortran中令人困惑的 double 实数

fortran - 使用 ifort 构建可执行共享库

fortran - 链接 Abaqus/Standard 用户子例程时出现问题

grid - 算法[最好是fortran]从二维非结构化网格中插入数据以形成笛卡尔网格

Fortran 二维数组初始化

java - 这个for循环有什么问题?

Java 编译错误 : Method reference in combination with overloading

java - 由于 hackerrank 程序中的 java 代码超时错误而终止

matlab - 漏洞? MATLAB MEX 更改默认逻辑的种类