Fonction d’écriture C qui renvoie int à Fortran

En fin de compte, j’essaie d’écrire une calculasortingce IPC en utilisant Fortran pour calculer et C pour transmettre les données entre les deux programmes Fortran. Lorsque j’aurai terminé, j’espère que cela ressemblera à:

Fortran program to pass input -> Client written in C -> Server written in C -> Fortran program to calculate input and pass ans back 

La partie client / serveur C est terminée, mais pour le moment, je ne peux pas écrire un programme qui prend des entrées dans un programme Fortran et les passe à un programme C qui calcule la réponse. Cependant, je vois som un comportement étrange.

Programme Fortran

 program calculator !implicit none ! type declaration statements integer x x = 1 ! executable statements x = calc(1,1) print *, x end program calculator 

Fonction C

 int calc_(int *a, int *b ) { return *a+*b; } 

J’ai écrit un programme principal qui vérifie que int calc_ () renvoie bien 2 lorsqu’il est appelé calc_ (1,1) en C, mais lorsque je lance le programme, je reçois la sortie de Fortran.

J’utilise ce makefile # Utilisez gcc pour C et gfortran pour le code 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 

Je ne peux pas pour le monde comprendre pourquoi c’est le cas, et cela me rend fou.

Presque embarrassant. Vous devez déclarer calc en tant qu’entier dans Fortran. Le code de travail Fortran est donc

 program calculator !implicit none ! type declaration statements integer x, calc x = 1 ! executable statements x = calc(1,1) print *, x end program calculator