最终我正在尝试编写一个IPC计算器,利用Fortran计算和C来传递两个Fortran程序之间的数据。当我完成它时,希望看起来像:
Fortran program to pass input -> Client written in C -> Server written in C -> Fortran program to calculate input and pass ans back
C客户端/服务器部分已完成,但目前我一直试图编写一个在Fortran程序中输入的程序,将其传递给计算答案的C程序。但是,我看到了一些奇怪的行为。
Fortran计划
program calculator
!implicit none
! type declaration statements
integer x
x = 1
! executable statements
x = calc(1,1)
print *, x
end program calculator
C函数
int calc_(int *a, int *b ) {
return *a+*b;
}
我编写了一个主程序,在C中调用calc_(1,1)时验证int calc_()确实返回2,但是当我运行程序时,我从Fortran获得输出。
我正在使用这个makefile #将gcc用于C和gfortran用于Fortran代码。 CC = GCC FC = gfortran
calc : calcf.o calcc.o
$(FC) -o calc calcf.o calcc.o
calcc.o : calcc.c
$(CC) -Wall -c calcc.c
calcf.o: calcf.f90
$(FC) -c calcf.f90
我不能让全世界弄清楚为什么会这样,而且这让我很生气。
答案 0 :(得分:0)
几乎令人尴尬的简单。您必须在Fortran中将calc声明为整数。因此,工作的Fortran代码是
program calculator
!implicit none
! type declaration statements
integer x, calc
x = 1
! executable statements
x = calc(1,1)
print *, x
end program calculator