使用另一个呼叫时呼叫系统错误

call system error with use another call

我最近开始编写一些简单的随机模型,使用 use IFPORT 来调用 random_seedrandom_number(variable)。在我的代码末尾,我添加了一个 call system('gnuplot -p plot.gnu') — 这导致了以下错误:

>ifort example.f90
error #6552: The CALL statement is invoking a function subprogram as a subroutine.   [SYSTEM]
call system('gnuplot -p plot.gnu')
-----^

代码如下

program abc
use IFPORT

!declaration and initialization of variables    
call random_seed

do while (condition)
  call random_number(ranval)
  !computation
  !write on a file
end do

call system('gnuplot -p plot.gnu')
end program abc

无法使用 ifort 编译此代码。如果我注释 use IFPORT,那么代码可以编译并且 call system 不会导致错误。所以,我不确定 use IFPORT 是否是使用 random_seedrandom_number() 所必需的。

不,根本没有必要使用 IFPORT

random_number()random_seed() 是 Fortran 90 及更高版本的 固有 过程,无需使用模块来调用它们。

system() 是一个非标准扩展,但在我目前使用的所有编译器中它也是一个 intrinsic 过程。同样,不必使用任何模块来调用它。

system() 可以用作函数或子例程,具体取决于编译器。函数版本调用为

err = system(command)

其中 err 是整数变量。

Intel Fortran 支持这两个版本。但是,同时只能使用其中一个! use IFPORT 似乎包含了 system() 作为函数的显式声明。


解法:

  1. 不要use IFPORT。 或者仅使用 use IFPORT, only:.

  2. IFPORT 中导入您实际需要的那些符号
  3. 如果一定要用,就用system()作为函数。