【发布时间】:2018-04-01 05:35:49
【问题描述】:
我现有的子程序A(a,b,c,d,e) 在哪里工作得很好
a,b,c 是实际参数,d 和 e 是可选参数。
许多其他子程序调用子程序A如
call A(a,b,c)
或
call A(a,b,c,d=2.0D0)
或
call A(a,b,c,e=1.0D0)
现在。
我决定从子程序A 中删除c。
所以变成了
subroutine A(a,b,d,e)
当我重新编译代码时,像
这样的行 call A(a,b,c,e=1.0D0)
编译器没有抱怨,这不是
我想要的是。现在,它认为 c 是
新子程序A(a,b,d,e)的可选参数d
我可以在我的所有代码中搜索所有出现的子例程 A 避免这种错误的解释,但我什至想念其中一个我要去 付出高昂的代价(错误的结果,痛苦的时刻,......),但这是一个很好的技巧 编译器抱怨,我必须修复它们。
这引出了我的问题。如何要求编译器不要假设
除非我输入= 符号,否则可选变量的默认关联?即,如果我想
使用可选变量,我将其传递为c=2.0D0、e=3.0D0。
没有 = 符号,有没有办法让它成为默认的非可选
争论?
这样,编译器肯定会抱怨,因为c 不是
匹配修改后的子程序中的任何现有变量。
【问题讨论】:
-
欢迎。请阅读tour 和How to Ask。适当的格式将使您的帖子更好。使用标签fortran。如果您想将答案限制在旧的和过时的 Fortran 90(通常您不希望这样),您可以添加 fortran90。
标签: fortran fortran90 optional-arguments