The following table shows the correspondence between the data types available in C/C++, Fortran, and Pascal. Several data types in C have no equivalent representation in Pascal or Fortran. Do not use them when programming for interlanguage calls. Blank table cells indicate that no matching data type exists.
| Correspondence of Data Types among C, C++, Fortran, and Pascal | ||
| C and C++ Data Types | Fortran Data Types |
Pascal Data Types |
|---|---|---|
| bool | LOGICAL*4 | |
| char | CHARACTER | CHAR |
| signed char | INTEGER*1 BYTE |
PACKED -128..127 |
| unsigned char | LOGICAL*1 | PACKED 0..255 |
| signed short int | INTEGER*2 | PACKED -32768..32767 |
| unsigned short int | LOGICAL*2 | PACKED 0..65535 |
| signed long int | INTEGER*4 | INTEGER |
| unsigned long int | LOGICAL*4 | -- |
| signed long long int | INTEGER*8 | -- |
| unsigned long long int | LOGICAL*8 | -- |
| float | REAL REAL*4 |
SHORTREAL |
| double | REAL*8 DOUBLE PRECISION |
REAL |
| long double (default) | REAL*8 DOUBLE PRECISION |
REAL |
| long double (with -qlongdouble or -qldbl128) | REAL*16 | -- |
| structure of two floats | COMPLEX COMPLEX*4 |
RECORD of two SHORTREALS |
| structure of two doubles | COMPLEX*16 DOUBLE COMPLEX |
RECORD of two REALS |
| struct of two long doubles (default) | COMPLEX*16 | -- |
| struct | -- | RECORD (see notes below) |
| enumeration | INTEGER*4 | Enumeration |
| char[n] | CHARACTER*n | PACKED ARRAY[1..n] OF CHAR |
| array pointer (*) to type | Dimensioned variable (transposed) | ARRAY |
| pointer (*) to function | Functional Parameter | Functional Parameter |
| structure (with -qalign=packed) | Sequence derived type | PACKED RECORD |
Special Treatment of Character and Aggregate Data
Most numeric data types have counterparts across the three languages. Character and
aggregate data types require special treatment:
VAR s: STRING(10);
is equivalent to:
struct {
int length;
char str [10];
};
where length contains the actual length of STRING.
| Storage of a Two-Dimensional Array | |||
| Storage Unit | C and C++ Element Name | Pascal Element Name | Fortran Element Name |
|---|---|---|---|
| Lowest | A[0][0] |
A[1,1] |
A(1,1) |
A[0][1] |
A[1,2] |
A(2,1) |
|
A[1][0] |
A[2,1] |
A(3,1) |
|
A[1][1] |
A[2,2] |
A(1,2) |
|
A[2][0] |
A[3,1] |
A(2,2) |
|
| Highest | A[2][1] |
A[3,2] |
A(3,2) |
![]()
Interlanguage Calling Conventions
Use the Subroutine Linkage Conventions in Interlanguage Calls
Sample Program: C Calling Fortran
