Fortran Coder

标题: fortran 调试时如何处理条件语句 [打印本页]

作者: rachel    时间: 2015-6-20 11:57
标题: fortran 调试时如何处理条件语句
[Fortran] 纯文本查看 复制代码
integer dim
parameter (dim=2)
double precision  dvx(dim), x, y, z

if(dim .eq. 1) then
    x=2.0+dvx(1)
elseif(dim.eq.2) then
    x=2.0+dvx(1)
    y=2.0+dvx(2)
else
    x=2.0+dvx(1)
    y=2.0+dvx(2)
    z=2.0+dvx(3)
endif

stop
end

debug下提示错误:
I:\visual studio 2010\test\test\Source1.f90(13): error #5560: Subscript #1 of the array DVX has value 3 which is greater than the upper bound of 2
但release运行无错误
求高人指教,用得是ivf编译器1. 程序可以处理3维问题,但我这里只用于解决2维问题,所以dim设为2,“z=2.0+dvx(3)
”应该不执行的呀
2. 在cvf下可以顺利通过调试

作者: li913    时间: 2015-6-21 09:11
这是数组越界。常见错误分析
http://fcode.cn/guide-36-1.html


作者: rachel    时间: 2015-6-22 16:35
也不是错误,cvf下就不会错误,主要是编译时不会判断,if的两条语句都运行就出现错误了
作者: vvt    时间: 2015-6-22 21:28
1.这是数组越界
2.你可以把 dim 设置为 3,既可解决这一问题。
3.你的数组是一维数组,而不是三维数组。只是其大小是3,而不是维度。这是重要概念,别搞错。
4.在编译时,if语句的每个分支都参与编译,并且不能出错,否则编译就会失败。
5.如果需要编译时只编译某一个分支,则使用“条件编译”
6.你的问题应该已经在QQ群完美解决了。
7.你在cvf上能够编译,是因为cvf垃圾,这样基本的错误都没能找出来。
8.编译时,运行时,这是两个非常非常重要的概念,你必须弄清楚哪些事情时编译时决定的,哪些是运行时决定的。
作者: andy8496    时间: 2015-6-25 18:26
"7.你在cvf上能够编译,是因为cvf垃圾,这样基本的错误都没能找出来。"




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