除非另有说明,否则此处列出的函数例程均不是内函数例程。这意味着函数返回的数据类型可能与函数名称的隐式类型处理相冲突,需要用户进行显式类型声明。例如,getpid() 返回的是 INTEGER*4,这就需要有 INTEGER*4 getpid 声明,以确保能够正确处理结果。(如果没有显式类型处理,缺省情况下,会假设为 REAL,这是因为函数名称以 g 开头。)请注意,显式类型语句位于这些例程的函数摘要中。
请注意,IMPLICIT 语句以及 -dbl 和 -xtypemap 编译器选项也会更改参数的数据类型处理以及返回值的处理。如果调用这些库例程时,预期的数据类型与实际的数据类型不一致,可能会导致出现意外行为。选项 -xtypemap 和 -dbl 可将 INTEGER 函数、REAL 函数和 DOUBLE 函数的数据类型分别提升为 INTEGER*8、REAL*8 和 REAL*16。为了防止出现这些问题,库调用中出现的函数名和变量必须按照其预期大小进行显式类型处理,如下所示:
integer*4 seed, getuid real*4 ran ... seed = 70198 val = getuid() + ran(seed) ... |
本示例中,进行了显式类型处理,以防止使用编译器选项 -xtypemap 和 -dbl 时,库调用中出现任何数据类型提升。如果没有进行显式类型处理,这些选项可能会导致出现意外结果。有关这些选项的详细信息,请参见《 Fortran 用户指南》和 f95(1) 手册页。
Fortran 95 编译器 f95 提供了一个 include 文件 system.inc,该文件定义了用于大多数非内库例程的接口。将该文件包含进来是为了确保对调用的函数及其参数正确地进行类型处理,尤其是在使用 -xtypemap 更改缺省的数据类型时。
include ’system.inc’ integer(4) mypid mypid = getpid() print *, mypid |
可以使用 Fortran 编译器的全局程序检查选项 -Xlist 获取许多与库调用中出现的类型不一致有关的问题。《Fortran 用户指南》、《Fortran 编程指南》和 f95(1) 手册页中介绍了 f95 编译器执行的全局程序检查信息。