Re: Calling a FORTRAN function that returns a complex
"Klaas Vantournhout" <no_valid_email@spam.com> wrote in message
news:fblp1k$c6m$1@gaudi2.UGent.be...
Hi all,
I was wondering why there is one extra argument for the return values of
complex functions. And why is this not the case with any other data
type (except char)
example :
* In case of a non complex value
=== FORTRAN ===
real function f(p)
real p
f = p
return
end
=== C-call / C++-call ===
extern float f_(float *); // for C
// extern "C" { float f_(float *); } // for C++
float r,s;
s = f_(&r);
==============
* in case of a complex value
=== FORTRAN ===
complex function f(p)
complex p
f = p
return
end
=== C-call ===
typedef struct { float r,i; } complex
extern void f_(complex *return, complex *);
complex r,s;
f_(&s,&r);
====C++ call=====
extern "C" { void f_(std::complex<float> *return, std::complex<float> *);
std::complex<float> r,s;
f_(&s,&r);
===================
So what is the structural reason of this difference
float f_(float *);
void f_(complex *return, complex *);
Look up the definitions of "real" and "imaginary" parts. That should give
you your answer.