Fortran Coder

标题: 求帮助,if语句的编译问题与条件编译 [打印本页]

作者: wengxi    时间: 2015-5-14 11:06
标题: 求帮助,if语句的编译问题与条件编译
[Fortran] 纯文本查看 复制代码
REAL X,M(1,3)
!READ*,X
X=1
IF (X<0) M(2,3)=2.0
IF (X<2) X=2.2
PRINT*,X
END

Error        1         error #5560: Subscript #1 of the array M has value 2 which is greater than the upper bound of 1        E:\programme\test\test\Source1.f90        6        
问题描述:请问Fortran90的语言或者编译器对判断语句为false的执行部分是否会编译?我觉得如果if判断为假,其对应的执行部分将会自动跳跃,不会报错,更不会编译。
                  图上所示,X的值第一个(X<0)是不会执行的,但是,后面的语句报错,表示编译的时候还是执行了的,这个不能理解,是语言问题,还是我编译器的问题?
                  谢谢!

帮助2.GIF (3.18 KB, 下载次数: 436)

结果

结果

帮助1.GIF (2.62 KB, 下载次数: 426)

帮助1.GIF

作者: vvt    时间: 2015-5-14 12:09
判断语句的路线要到执行时才能确定。编译时无法确定。所以都会编译。
作者: wengxi    时间: 2015-5-14 13:05
也就是说fortran语言在编译时会对所有的语句(包括将来不执行的)进行类型和脚标的编译,现在如果我的程序要避免这个,有什么办法可以让他不对其编译。具体地说,我设置了多个开关,而在我这套开关的情况下会和别的开关不执行的语句想矛盾,可以解决的办法是什么?在不删去、注释的办法下,可以让他不编译或者直接跳过编译运行吗?
作者: wengxi    时间: 2015-5-14 13:06
vvt 发表于 2015-5-14 12:09
判断语句的路线要到执行时才能确定。编译时无法确定。所以都会编译。

谢谢,我又追问了一下。
作者: 楚香饭    时间: 2015-5-14 13:08
条件编译。这个具体要看你使用什么编译器。比如 Intel fortran 的话。
[Fortran] 纯文本查看 复制代码
!DIR$ DEFINE testflag
!DIR$ IF DEFINED (testflag)
   write (*,*) 'Compiling first line'
!DIR$ ELSE
   write (*,*) 'Compiling second line'
!DIR$ ENDIF!DIR$ UNDEFINE testflag



作者: wengxi    时间: 2015-5-14 23:06
请问一下,我觉得我没有做什么,怎么变成这个样子,题目也改变了,然后还采纳了。
作者: fcode    时间: 2015-5-15 08:29
为了方便主题归类和后人搜索方便,我会对已解决的问题做适当的调整(在不改变发帖人意愿的前提下,做包括“修改帖子标题”,“排版帖子内代码”等)

这里不是百度知道,所以不存在“采纳”一说。而是管理人员标记这个主题为“已解决”,并不会有任何回答者因此而“受益”,也不影响这个帖子继续讨论和回复,也仅仅是出于分类管理的目的。
作者: pasuka    时间: 2015-5-15 08:55
lz这个不是典型的数组越界嘛!
作者: wengxi    时间: 2015-5-15 16:10
pasuka 发表于 2015-5-15 08:55
lz这个不是典型的数组越界嘛!

你说的很对,我的数组却是越界了。但是这个越界的地方应该是不执行的 ,所以是可以继续执行的。
作者: wengxi    时间: 2015-5-16 12:52
fcode 发表于 2015-5-15 08:29
为了方便主题归类和后人搜索方便,我会对已解决的问题做适当的调整(在不改变发帖人意愿的前提下,做包括“ ...

十分感谢。另外说一句,我不介意受益与否,毕竟别人帮了我,没问我要钱已经很好了。
作者: 百事可乐    时间: 2015-5-16 14:12
有些 if  分支你是可以确定一定不会执行的.但是编译器没法确定.所以只能都编译.

比如 :
integer :: s
read(*,*) s
if ( (s+s-2*s) == 0 ) then
  ...
end if

作者: rachel    时间: 2015-6-20 11:47
我也碰到这种情况了,在cvf下正常,但在ivf下就会出现上述问题,求点拨!
作者: wengxi    时间: 2015-7-9 15:15
rachel 发表于 2015-6-20 11:47
我也碰到这种情况了,在cvf下正常,但在ivf下就会出现上述问题,求点拨!

cvf在哪里下载的?给份吧。1585180632@qq.com。条件编译,就是编译时可以不用跑遍所有语句。
作者: 楚香饭    时间: 2015-7-9 15:27
wengxi 发表于 2015-7-9 15:15
cvf在哪里下载的?给份吧。。条件编译,就是编译时可以不用跑遍所有语句。 ...

链接:http://pan.baidu.com/s/1mg6AunQ 密码:wiaw
作者: 百事可乐    时间: 2015-7-9 16:43
cvf 还是放弃吧




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2