我有一个例程的Fortran代码:
SUBROUTINE READ_NC_VALS(NCID, RECID, VARNAME, VARDATA)
integer ncid, recid
character*(*) varname
real*8 vardata
dimension vardata(15,45,75)
etc.
我想有一定的灵活性添加到这个代码,我想我会首先加入一个可选的标志参数做到这一点:
SUBROUTINE READ_NC_VALS(NCID, RECID, VARNAME, VARDATA, how_to_calculate)
! everything the same and then ...
logical, optional :: how_to_calculate
现在,在这一点上,我甚至没有使用“how_to_calculate”。 我只是把它变成代码进行测试。 所以我编译代码顺利。 然后我运行它,我在子程序得到一个错误。 具体而言,一些代码值的后面是“神奇”,从他们身上所没有的可选参数改变。 新价值是没有意义的代码的逻辑,所以它与一个错误消息礼貌地退出。 让我再次强调,在这一点上,我甚至不使用这个可选参数。 那么,在一个云雀,我回去在调用这个例程和,即使我在选购新的说法,我把价值观它在所有呼叫源的所有地方。 当我这样做,代码运行正常。 那么这是什么一回事? 如何在子程序结果中的其他数据未使用的可选参数的存在本身被破坏? 而如何能为这个可选参数解决的事情再次增加的输入参数? 这是正在编译PGI,顺便说一句。
有任何想法吗? 谢谢。
顺便说一句,对不起,不能提供更多的代码。 我的老板可能不会太高兴我,如果我这样做。 我不制定规则; 我只是在这里工作。