|
|
1
4
当您试图在代码中调用的过程(函数或子例程)出现时
外部
Fortran是一种静态类型语言,因此在编译时必须知道所有变量和函数的类型。因此,如果要在程序中引用外部函数,必须有一种方法让程序知道其返回类型。你有3个( 坏的
你为什么不应该那样做?
. 它使代码的含义变得模糊,你不知道这个名字指的是什么。在某些情况下,它甚至可能看起来像一个数组变量,而不是一个函数。此外,在这种情况下,编译器不会检查参数的一致性,因此如果没有打开特定的编译器选项,代码将在
运行时
,或更糟,将给出错误的结果。此外,现在隐式键入很少有用,大多数时候都是自找麻烦。始终使用
这就像声明变量一样,如下所示:
你为什么不应该那样做?
编译器也没有检查参数。这严重限制了与外部函数通信的选项:参数不能假定为形状、假定为秩、多态、参数化、共阵列,也不能在被调用方声明为
这样,编译器就能够知道声明的所有细节,而我提到的所有限制都不适用。完全自由和代码清晰!
因为有一个更好的方法,那就是使用
奖金: 更好 :使用模块。
你为什么一定要这么做?
因为对于模块,接口是自动且隐式可用的(代码重复更少,没有限制);模块可以单独重新编译和更新,而不会破坏代码。此外,您可以在模块范围内声明共享变量,并避免使用
甚至可以选择将函数直接包含到
最后一点:看一看
this answer
看看为什么语法
|
|
|
2
4
正如注释中所述,简单地声明函数不仅在其自身的范围内,而且在其被调用的范围内,将解决您的问题。不过,我也不想让您使用普通的隐式键入和完全非标准的real*8
|