所以我有一个程序,里面有这样的东西:
integer :: mgvn, stot, gutot, iprint, iwrit, ifail, iprnt
...
call readbh(lubnd,nbset,nchan,mgvn,stot,gutot,nstat,nbound,rr,bform,iprnt,iwrit,ifail)
然后在里面readbh
:
CALL GETSET(LUBND,NSET,KEYBC,BFORM,IFAIL)
IF(IFAIL.NE.0) GO TO 99
...
99 WRITE(IWRITE,98) NBSET,LUBND
IFAIL = 1
RETURN
所有其他变量都已定义,但未定义ifail
。如果我在write(*,*) ifail
函数调用之前添加,我得到未定义的变量错误,但如果我把它排除在外,它不会抱怨,只是带着函数跑掉,总是失败,带着IFAIL=1
.
这是因为它刚刚到达readbh
函数中参数的末尾,读取未初始化的内存 - 这只是随机的乱码 - 然后将这些位转换为int
- 除非我非常(un),否则它不会为零幸运,所以几乎总是在制造ifail.ne.0
true
?