我最近开始使用use IFPORT
编写一些简单的随机模型来调用random_seed
和random_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_seed
和random_number()
。
答案 0 :(得分:2)
不,根本不需要使用IFPORT
。
random_number()
和random_seed()
是Fortran 90及更高版本的内在过程,不需要使用任何模块来调用它们。
system()
是一个非标准扩展,但它在我目前使用的所有编译器中也是内在过程。同样,不必使用任何模块来调用它。
system()
可以作为函数使用,也可以作为子程序使用,具体取决于编译器。函数版本称为
err = system(command)
其中err
是整数变量。
英特尔Fortran支持这两个版本。但是,它们中只有一个可以同时使用!似乎use IFPORT
包含system()
作为函数的显式声明。
<强>解决方案:强>
请勿use IFPORT
。
或者只使用IFPORT
从use IFPORT, only:
导入您真正需要的符号。
如果您必须使用它,请使用system()
作为功能。