我從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。 –