Fortran Coder

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

[讨论] 请提这种错误是什么原因?

[复制链接]

68

帖子

23

主题

0

精华

熟手

F 币
244 元
贡献
132 点
跳转到指定楼层
楼主
发表于 2022-12-19 16:24:52 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
先贴代码---------------
[Fortran] 纯文本查看 复制代码
program ex0816
  implicit none
  integer  :: a(5)=(/ 1,2,3,4,5 /)
  Call ShowArray1(a)
  write(6,*)a
  Stop
End

Subroutine ShowArray1(num1)
  implicit none
  integer  :: num1(:)
  num1 = num1 + 1
  write(6,*)num1
  return
End

---------------
自我感觉这个代码没有什么问题,但在IVF编译时(Debug),提示下面错误。但选择Release时,没有任何错误提示,编译成功。

后来查到按照下面设置即可。确实解决了问题,没有错误提示,编译成功。但心里有疑虑,这样的代码运行时,会不会有什么问题?高手能否指点下?




分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

68

帖子

23

主题

0

精华

熟手

F 币
244 元
贡献
132 点
沙发
 楼主| 发表于 2022-12-19 18:37:06 | 显示全部楼层
非常感谢您,终于明白我的错在哪里了,非常感谢。
要是声明这个数组时,按照正常语法,直接声明其大小,就没有这种错误提示了。另外,我试了试,上面的代码虽然编译成功,但是输出结果仍然是原始值(1,2,3,4,5)。说明子程序没有起作用。再次感谢

68

帖子

23

主题

0

精华

熟手

F 币
244 元
贡献
132 点
板凳
 楼主| 发表于 2022-12-20 16:39:34 | 显示全部楼层
佩服。有道理。确认了解决这个问题就是两种方法:
(1)采用 integer  :: num1(:)  这样的声明方式,然后把subroutine封装module。这也也省事,就是不需要把子程序中每个数组的维度都传递进去。
(2)采用 integer  :: num1(5) 这样的声明方式,不需要module。

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-2 09:13

Powered by Tencent X3.4

© 2013-2024 Tencent

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