【发布时间】:2019-11-29 10:28:49
【问题描述】:
我制作了这个小测试程序来“证明”在编译之前(或者如果你让它们可分配),你不能在不指定它们的大小的情况下使用向量。我的观点失败了。我期待本地向量“num”会失败。程序在执行程序之前无法知道它的大小。大小 nod 在执行时从用户那里读取。我使用以下命令编译:
gfortan -fcheck=all test.f90
执行过程中“nod”的值是500000000
gfortran的版本是6.3.0
执行“正常”并返回以下答案:
7 9.9000000000000004 9.9000000000000004 500000000
所以我的问题是;为什么编译器不会向我抛出我在(未定义的)向量之外编写的错误?我想它看到了我的错误并拯救了我??通过使其可分配?还是我完全错了?
MODULE globaldata
IMPLICIT NONE
INTEGER nod
END MODULE globaldata
MODULE modtest
USE globaldata
IMPLICIT NONE
CONTAINS
SUBROUTINE mysubtest(dummy)
IMPLICIT NONE
INTEGER :: dummy
REAL(kind=8) :: num(nod)
dummy = 7
num = 9.9d0
write(*,*) dummy,num(1),num(nod),size(num)
END SUBROUTINE mysubtest
END MODULE modtest
PROGRAM test
USE globaldata
USE modtest
IMPLICIT NONE
INTEGER dummy1
WRITE(*,*)"Give the value of nod:"
READ(*,*) nod
CALL mysubtest(dummy1)
END PROGRAM test
【问题讨论】:
-
程序正常,我看不到错误。
-
This other question 可能很相关。