【发布时间】:2016-08-08 02:52:44
【问题描述】:
我编写了一个简单的演示代码来快速提出我的问题。这是代码,无法成功构建。
Main.f90
PROGRAM test
IMPLICIT NONE
INTEGER :: a
a = 1
CALL sub(a)
END PROGRAM
sub.f90
SUBROUTINE sub(a)
IMPLICIT NONE
INTEGER :: a
SELECT CASE(a)
CASE(1)
INTEGER :: b,c
b = a
c = a*2
CASE(2)
INTEGER :: b(4),c(4)
b(:) = a
c(:) = a*2
END SELECT
END SUBROUTINE
我试图编译,但错误显示子程序文件中出现'Unexpected data declaration statement'。这是否意味着我不能在 SELECT CASE 结构中声明参数类型?问题是我想在主程序中定义 a 的值并将其传递给子程序 sub(a)。 b 和 c 的参数类型应该由 a 决定,因此我无法提前确定。我还想将 b 和 c 的值传递回主程序,我不知道该怎么做。那么我该如何实现呢?谢谢。
【问题讨论】:
-
您可以使用现代 Fortran (2008+) 编译器吗?如果是这样,您可以使用
block构造。 -
谢谢。我实际上是在尝试对使用 Fortran 90 的程序进行一些更改,所以我可能希望保持这种方式以防止潜在的麻烦。
-
我不明白你的立场。任何不使用已删除功能的符合标准的 Fortran 90 程序(几乎没有人使用它们,因为它们已被宣布过时)仍然符合标准的 Fortran 2015。请记住,Fortran 90 已有近 3 年的历史并且不支持很多现代编程实践。你用的是什么编译器?
标签: fortran