Как правильно создать интерфейс lib для Fortran и C
Я хотел бы создать библиотеку, которая предоставляла бы API для программ на C и Fortran, но я хочу, чтобы имена функций были одинаковыми. Например, в реализациях MPI имена функций MPI одинаковы для Fortran и C, отличие состоит в том, что интерфейс Fortran имеет еще один аргумент ierr для хранения возвращаемого значения. Я хотел бы сделать что-то подобное.
c_api.h:
int foo(char *par);
f_api.h
void foo_(char* par, int ierr);
f_api.c:
#include "c_api.h"
void foo_(char* par, int ierr)
{
ierr = foo(par);
}
Компилятор (очевидно) жалуется, что существуют конфликтующие типы для функции foo() и что я ранее объявил ее в c_api.h. Как правильно делать то, что я пытаюсь сделать? Я хотел бы избежать необходимости иметь разные имена API для программ на Фортране и Си.