Fortran Coder

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

[编译器] 数组读入到几千行的时候报错

[复制链接]

7

帖子

2

主题

0

精华

入门

F 币
39 元
贡献
20 点
跳转到指定楼层
楼主
发表于 2017-6-2 09:03:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源码就不往上贴了,太大。
定义一个数组,并用data赋值(r8是一个kind的数值)
---------------------------------------------------------------------------------------------------------
real (r8), dimension (45, 45, 91) :: saar_ref
data saar_ref / &
8.9999999999999998e+90_r8, 8.9999999999999998e+90_r8, 8.9999999999999998e+90_r8,  &
8.9999999999999998e+90_r8, 8.9999999999999998e+90_r8, 8.9999999999999998e+90_r8,  &
.....................此处省略好多........................................&
/
---------------------------------------------------------------------------------------------------------
现在的问题是,编译这个文件,报错:
---------------------------------------------------------------------------------------------------------
yangxd@latecomer03:modules> ifort -c gsw_mod_saar_data.f90
gsw_mod_saar_data.f90(4421): catastrophic error: Statement too long
8.9999999999999998e+90_r8, 8.9999999999999998e+90_r8, 8.9999999999999998e+90_r8,  &
-----------------------------------------------------^
compilation aborted for gsw_mod_saar_data.f90 (code 1)
---------------------------------------------------------------------------------------------------------
这个地方的statement too long是什么原因呢?
真心找不到原因,谢谢各位了

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

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2017-6-2 09:29:09 | 只看该作者
虽然有续行,但是编译器依然对总的行的长度有限定。

较大的数组,建议采用文件读入。

如果整个数组都是 8.9999999999999998e+90_r8 的胡,可以这样写:

real (r8), dimension (45, 45, 91) :: saar_ref = 8.9999999999999998e+90_r8

7

帖子

2

主题

0

精华

入门

F 币
39 元
贡献
20 点
板凳
 楼主| 发表于 2017-6-5 08:32:35 | 只看该作者
fcode 发表于 2017-6-2 09:29
虽然有续行,但是编译器依然对总的行的长度有限定。

较大的数组,建议采用文件读入。

你好,谢谢你的回复。
------------------------------------------------------------
我的数组里面,不全是这个数字。
你的意思是,我可以先把数组内容放到文本文件里面,然后通过READ读入数组?

另,怎样知道我的编译器对总行数的限制呢?

再次感谢。

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2017-6-5 11:39:50 | 只看该作者
是的,我正是这个意思。

编译器对续行的限定,可以看编译器的帮助文档。关于 Compiler Limit 的说明。

比如 ifort 的帮助里就说到:

Continuation lines - free form
Depends on line complexity and the number of lexical tokens allowed.

Continuation lines - fixed form
Depends on line complexity and the number of lexical tokens allowed.

Lexical tokens per statement
40000


这说明,对于 ifort 来说,续行行数没有限定。但是每个语句只能有最多 40000 个 token。
(token 包含,变量名,逗号,括号,等于号等等)

7

帖子

2

主题

0

精华

入门

F 币
39 元
贡献
20 点
5#
 楼主| 发表于 2017-6-5 12:06:27 | 只看该作者
fcode 发表于 2017-6-5 11:39
是的,我正是这个意思。

编译器对续行的限定,可以看编译器的帮助文档。关于 Compiler Limit 的说明。

嗯嗯,明白了,真是太谢谢你了。
再就是对token这个词,我以前以为只是逗号或括号。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-20 14:04

Powered by Tencent X3.4

© 2013-2024 Tencent

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