Fortran Coder

查看: 9366|回复: 2
打印 上一主题 下一主题

[子程序] non-keyword arguments are invalid after keyword arguments have been encountered

[复制链接]

237

帖子

0

主题

0

精华

版主

World Analyser

F 币
638 元
贡献
468 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
楼主
发表于 2018-1-16 08:54:59 | 显示全部楼层
本帖最后由 kyra 于 2018-1-16 09:02 编辑

call sub(a,b,c,d,e,f)
subroutine sub(AI,BI,CI,DI,EI,FI)
调用一个函数,有一个参数列表。
一旦参数列表里有一个关键字了,比如
call sub(a,b,c,DI=d,e,f)

那么,该关键字后面的参数,也必须带关键字。也就是上面的写法是错误的,必须写成
call sub(a,b,c,DI=d,EI=e,FI=f)
或者调换顺序,写成
call sub(a,b,c,EI=e,FI=f,DI=d)

这是一个逻辑问题,而不是程序问题。
生活中也有类似的情况,假象你手上有一个“学生名单”,但你以前从来没有见过他们,是第一次,如果学生按照名单的顺序排好队,你不需要让每个学生报自己的名字,你就可以按照顺序去对应。
一旦有一个学生开始“插队”了,你必须让他报出自己的名字,你才知道他是谁,对吧?而且后面的学生,已经打破了“学生名单”上的顺序,也必须每个学生报自己的名字,你才知道他们分别是谁,对吧?

“学生名单” : 虚参
学生顺序:实参
报自己名:关键字参数,如,DI = d
你:编译器

同样的问题,也适合于编译器自带的语句,比如 Open,Read,这些有子句的语句。
比如:
Open( 12 , File = "name.txt" )
Read( 12 , fmt = "(a)" ) str
都是正确的,但
Read( Unit = 12 , "(a)" ) str 则不正确,必须写成
Read( Unit = 12 , fmt = "(a)" ) str
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-3 10:41

Powered by Tencent X3.4

© 2013-2024 Tencent

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