我从FORTRAN 90代码调用C例程。所有的工作都很好,但我想知道为什么和如何用更少的参数调用C程序,我应该让编译器不抱怨。编译器在这里做什么?我正在使用Cray编译器。不同数目的参数调用C例程从FORTRAN 90
test.c的
extern "C" void test_(double* x, double* y, double* z){
// do some work
}
driver.F90
MODULE DRIVER
! declare arrays
DOUBLE PRECISION, DIMENSION(dim, dim), INTENT(IN) :: x
DOUBLE PRECISION, DIMENSION(dim, dim), INTENT(IN) :: y
! call C subroutine
CALL test(x, y)
END MODULE DRIVER
可能的测试函数会弹出一个未定义的值,表示Fortran没有推入堆栈(或将null可能为零)。例子:push x,y,z pop z,y,x但是没有做最新的push,所以它是push x,y pop z(它是y),y(它是x),undefined x(没有push/null) –
在你的C打印z方法并找出答案。由于每个编译器都不同,因此在调用外部方法时应始终确保传入正确的编号参数。它要么将z设置为默认值(零或空值),要么会损坏堆栈,并且您将遇到一些内存问题,可能会显示更多内容...... – MoonKnight
我不相信这是downvoted。 –