declaring C enum types

Fergus Henderson fjh at
Thu Oct 17 09:46:21 EDT 2002

On 17-Oct-2002, Simon Marlow <simonmar at> wrote:
> Yes.  The C99 spec says (sec.
>        [#4] Each  enumerated  type  shall  be  compatible  with  an
>        integer     type.      The     choice     of     type     is
>        implementation-defined   but   shall   be   capable   of
>        representing  the  values  of  all  the   members   of   the
>        enumeration. [...]
> If a C compiler can choose any integer type, then it seems to me that
> mixing code from two C compilers on the same platform might not work.
> Hmmm.

The choice of representation of enums is part of the C ABI.
Two different compilers on the same platform can use different C ABIs,
so yes, mixing code from such compilers might not work.
However, enums are the least of your problems there.
Compilers also need to cooperate about object file format, name mangling,
the usage of registers and stack, the sizes and representations of the
basic types such as `int', struct padding, alignment, and so on.

If two C compilers both support the same C ABI, then it is possible
to mix code between them.

Fergus Henderson <fjh at>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <>  |     -- the last words of T. S. Garp.

More information about the FFI mailing list