Если вы не хотите проходить сериализацию, один из методов, которые я видел, используется для исключения перечислений и простого использования 32-битных беззнаковых целых чисел и #DEFINEs для эмуляции перечислений. Вы теряете некоторую безопасность типов для некоторых гарантий относительно формата данных.
В противном случае вы полагаетесь на то, что поведение, не гарантированное в спецификации языка, будет реализовано одинаково на всех ваших компиляторах. Если вас не беспокоит общая переносимость, и вы просто хотите обеспечить одинаковый эффект на двух компиляторах, это может быть возможно путем проб и ошибок и большого количества тестов, чтобы заставить эти два сделать одно и то же. Я считаю, что спецификация C99 позволяет внутренним перечислениям иметь размер int или меньше, но не больше int. Итак, одна вещь, которую я видел, чтобы предположительно намекнуть компилятору в правильном направлении:
typedef enum
{
READY = 400,
RUNNING = 401,
BLOCKED = 402,
FINISHED = 403,
MAX = MAX_INT
} eState;
Это должно ограничить выбор компилятором того, как хранить перечисление. Обратите внимание, что компиляторы могут нарушать стандарт, однако я знаю, что gcc имеет нестандартную функцию, которая позволяет при необходимости использовать 64-битные перечисления.
Также проверьте:
Каков размер перечисления в C?