Fortran Coder

查看: 10069|回复: 4
打印 上一主题 下一主题

[流程控制] fortran 调试时如何处理条件语句

[复制链接]

3

帖子

1

主题

0

精华

新人

F 币
20 元
贡献
9 点
跳转到指定楼层
楼主
发表于 2015-6-20 11:57:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[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下可以顺利通过调试
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2015-6-21 09:11:18 | 只看该作者
这是数组越界。常见错误分析
http://fcode.cn/guide-36-1.html

3

帖子

1

主题

0

精华

新人

F 币
20 元
贡献
9 点
板凳
 楼主| 发表于 2015-6-22 16:35:20 | 只看该作者
也不是错误,cvf下就不会错误,主要是编译时不会判断,if的两条语句都运行就出现错误了

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

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

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
5#
发表于 2015-6-25 18:26:15 | 只看该作者
"7.你在cvf上能够编译,是因为cvf垃圾,这样基本的错误都没能找出来。"
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-24 21:20

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表