Software Archive
Read-only legacy content
17061 Discussions

how to access C structure using Fortran common block?

Intel_C_Intel
Employee
408 Views
Hi,

I see from "online documentation" about how to access common block from C. and it also says you can do that reversely. There is no examples there. I tried to use extern before common, and all failed.
Could someone enlight me on how to do that?

Thanks!
dpp

Quote:
-----------------------
Accessing Common Blocks and C Structures Directly

You can access Fortran common blocks directly from C by defining an external C structure with the appropriate fields, and making sure that alignment and padding between Fortran and C are compatible. The C and ALIAS ATTRIBUTES options can be used with a common block to allow mixed-case names.

As an example, suppose your Fortran code has a common block named Really, as shown:

!DEC$ ATTRIBUTES ALIAS:'Really' :: Really
REAL(4) x, y, z(6)
REAL(8) ydbl
COMMON / Really / x, y, z(6), ydbl

You can access this data structure from your C code with the following external data structure:

#pragma pack(2)
extern struct {
float x, y, z[6];
double ydbl;
} Really;
#pragma pack()

You can also access C structures from Fortran by creating common blocks that correspond to those structures. This is the reverse case from that just described. However, the implementation is the same because after common blocks and structures have been defined and given a common address (name), and assuming the alignment in memory has been dealt with, both languages share the same memory locations for the variables
0 Kudos
1 Reply
Intel_C_Intel
Employee
408 Views
I figured that I have to use extern in C for both cases. :(
0 Kudos
Reply