The tables below summarize the data sizes and default alignments for FORTRAN 77 and Fortran 90 data types. In both tables, note the following:
C data types int, long int, and long are equivalent (4 bytes). In a 64-bit environment and compiling with -xarch=v9 or v9a, long and pointers are 8 bytes. This is referred to as "LP64".
REAL*16 and COMPLEX*32, (REAL(KIND=16) and COMPLEX(KIND=16)), are available only on SPARC platforms. In a 64-bit environment and compiling with -xarch=v9 or v9a, alignment is on 16-byte boundaries.
Alignments marked 4/8 for SPARC indicate that alignment is 8-bytes by default, but on 4-byte boundaries in COMMON blocks. The maximum alignment in COMMON is 4-bytes.
The elements and fields of arrays and structures must be compatible.
You cannot pass arrays, character strings, or structures by value.
You can pass arguments by value from f77 to C, but not from C to f77, since %VAL() is not allowed in a Fortran dummy argument list.
Table 11-1 shows the sizes and allowable alignments for FORTRAN 77 data types. It assumes no compilation options affecting alignment or promoting default data sizes are applied. (See also the FORTRAN 77 Language Reference Manual).
Table 11-1 Data Sizes and Alignments--(in Bytes) Pass by Reference (f77 and cc)
FORTRAN 77 Data Type |
C Data Type |
Size |
Default Alignment SPARC x86 |
|
---|---|---|---|---|
BYTE X CHARACTER X CHARACTER*n X |
char x unsigned char x unsigned char x[n] |
1 1 n |
1 1 1 |
1 1 1 |
COMPLEX X COMPLEX*8 X DOUBLE COMPLEX X COMPLEX*16 X COMPLEX*32 X |
struct {float r,i;} x; struct {float r,i;} x; struct {double dr,di;}x; struct {double dr,di;}x; struct {long double dr,di;} x; |
8 8 16 16 32 |
4 4 4/8 4/8 4/8/16 |
4 4 4 4 -- |
DOUBLE PRECISION X REAL X REAL*4 X REAL*8 X REAL*16 X |
double x float x float x double x long double x |
8 4 4 8 16 |
4/8 4 4 4/8 4/8/16 |
4 4 4 4 -- |
INTEGER X INTEGER*2 X INTEGER*4 X INTEGER*8 X |
int x short x int x long long int x |
4 2 4 8 |
4 2 4 4 |
4 2 4 4 |
LOGICAL X LOGICAL*1 X LOGICAL*2 X LOGICAL*4 X LOGICAL*8 X |
int x char x short x int x long long int x |
4 1 2 4 8 |
4 1 2 4 4 |
4 1 2 4 4 |
The following table similarly compares the Fortran 90 data types with C.
Table 11-2 Data Sizes and Alignment--(in Bytes) Pass by Reference (f90 and cc)
Fortran 90 Data Type |
C Data Type |
Size |
Alignment |
|
---|---|---|---|---|
CHARACTER x |
unsigned char x ; | 1 | 1 | |
CHARACTER (LEN=n) x |
unsigned char x[n] ; | n | 1 | |
COMPLEX x |
struct {float r,i;} x; | 8 | 4 | |
COMPLEX (KIND=4) x COMPLEX (KIND=8) x COMPLEX (KIND=16) x |
struct {float r,i;} x; struct {double dr,di;} x; struct {long double, dr,di;} x; |
8 16 32 |
4 4/8 4/8/16 |
|
DOUBLE COMPLEX x | struct {double dr, di;} x; | 16 | 4/8 | |
DOUBLE PRECISION x |
double x ; | 8 | 4 | |
REAL x |
float x ; | 4 | 4 | |
REAL (KIND=4) x REAL (KIND=8) x REAL (KIND=16) x |
float x ; double x ; long double x ; |
4 8 16 |
4 4/8 4/8/16 |
|
INTEGER x |
int x ; | 4 | 4 | |
INTEGER (KIND=1) x INTEGER (KIND=2) x INTEGER (KIND=4) x INTEGER (KIND=8) x |
signed char x ; short x ; int x ; long long int x; |
1 2 4 8 |
4 4 4 4 |
|
LOGICAL x |
int x ; | 4 | 4 | |
LOGICAL (KIND=1) x LOGICAL (KIND=2) x LOGICAL (KIND=4) x LOGICAL (KIND=8) x |
signed char x ; short x ; int x ; long long int x; |
1 2 4 8 |
4 4 4 4 |