Calling C routines from Fortran programs.

Dik T. Winter dik at cwi.nl
Wed May 25 05:55:18 AEST 1988


I know how to call C routines from Fortran programs on the systems
I work on.  What I want to know is if there are other systems that
require other methods.

The facts. Given a C routine:
	foo(a, n) int *a, n;
that I want to call from a Fortran program as
	K = BAR(A, N)
What should the interface routine (written in C) look like?
The general Unix solution is:
	bar_(a, n) int *a, *n;
	{
		return(foo(a, *n));
	}
Another interface I have encountered is:
	BAR(a, n) int *a, *n;
	{
		return(foo(a, *n));
	}
Reading about the cdecl keyword on the net, I suspect tha Microsoft
interface ought to be:
	cdecl int foo();
	fortran int bar(a, n) int *a, *n;
	{
		return(foo(a, *n));
	}
(but correct me if I am wrong).
And I know one system where I have to write:
	BAR(a, n) int a, n;
	{
		return(foo((int *)(a >> 16), *((int *)(n >> 16))));
	}
because addresses in Fortran and pointers in C are not aligned the same way.

If you know other methods please mail me, I will summarise on the net.
-- 
dik t. winter, cwi, amsterdam, nederland
INTERNET   : dik at cwi.nl
BITNET/EARN: dik at mcvax



More information about the Comp.lang.c mailing list