使用另一个呼叫时呼叫系统错误
call system error with use another call
我最近开始编写一些简单的随机模型,使用 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()
所必需的。
不,根本没有必要使用 IFPORT
。
random_number()
和 random_seed()
是 Fortran 90 及更高版本的 固有 过程,无需使用模块来调用它们。
system()
是一个非标准扩展,但在我目前使用的所有编译器中它也是一个 intrinsic 过程。同样,不必使用任何模块来调用它。
system()
可以用作函数或子例程,具体取决于编译器。函数版本调用为
err = system(command)
其中 err
是整数变量。
Intel Fortran 支持这两个版本。但是,同时只能使用其中一个! use IFPORT
似乎包含了 system()
作为函数的显式声明。
解法:
不要use IFPORT
。
或者仅使用 use IFPORT, only:
.
从 IFPORT
中导入您实际需要的那些符号
如果一定要用,就用system()
作为函数。
我最近开始编写一些简单的随机模型,使用 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()
所必需的。
不,根本没有必要使用 IFPORT
。
random_number()
和 random_seed()
是 Fortran 90 及更高版本的 固有 过程,无需使用模块来调用它们。
system()
是一个非标准扩展,但在我目前使用的所有编译器中它也是一个 intrinsic 过程。同样,不必使用任何模块来调用它。
system()
可以用作函数或子例程,具体取决于编译器。函数版本调用为
err = system(command)
其中 err
是整数变量。
Intel Fortran 支持这两个版本。但是,同时只能使用其中一个! use IFPORT
似乎包含了 system()
作为函数的显式声明。
解法:
不要
use IFPORT
。 或者仅使用use IFPORT, only:
. 从 如果一定要用,就用
system()
作为函数。
IFPORT
中导入您实际需要的那些符号