Interfacing to C with GNAT can use one of two approaches:
Interfaces.C
may be used.
Pragma Convention C
may be applied to Ada types, but mostly has no
effect, since this is the default. The following table shows the
correspondence between Ada scalar types and the corresponding C types.
Ada Type | C Type |
---|---|
Integer | int |
Short_Integer | short |
Short_Short_Integer | signed char |
Long_Integer | long |
Long_Long_Integer | long long |
Short_Float | float |
Float | float |
Long_Float | double |
Long_Long_Float | This is the longest floating-point type supported by the hardware. |
Additionally, there are the following general correspondences between Ada and C types:
Convention C
is specified, which causes them to have a length of
32 bits, except for boolean types which map to C99 bool
and for
which the length is 8 bits.
Without pragma Convention C
, Ada enumeration types map to
8, 16, or 32 bits (i.e., C types signed char
, short
,
int
, respectively) depending on the number of values passed.
This is the only case in which pragma Convention C
affects the
representation of an Ada type.
type'Size
value in Ada.