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

时间:2017-03-14 07:44:58

标签: fortran intel-fortran

我最近开始使用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()

1 个答案:

答案 0 :(得分:2)

不,根本不需要使用IFPORT

random_number()random_seed()是Fortran 90及更高版本的内在过程,不需要使用任何模块来调用它们。

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

system()可以作为函数使用,也可以作为子程序使用,具体取决于编译器。函数版本称为

err = system(command)

其中err是整数变量。

英特尔Fortran支持这两个版本。但是,它们中只有一个可以同时使用!似乎use IFPORT包含system()作为函数的显式声明。

<强>解决方案:

  1. 请勿use IFPORT 。 或者只使用IFPORTuse IFPORT, only:导入您真正需要的符号。

  2. 如果您必须使用它,请使用system()作为功能。