Если вы хотите, чтобы значения были уникальными, они должны принадлежать одному перечислению.Отдельные перечисления могут иметь перекрывающиеся наборы значений, не вызывая каких-либо проблем в обычной программе на Си.
Если у вас действительно есть веская причина для необходимости непересекающихся наборов значений в перечислениях, то, я думаю, вам следует определить обычный 'последнийчлен каждого перечисления, и используйте его для запуска следующего:
typedef enum transfer_states_e {
/* Call transfer bind/supervised */
STATE_TRANSFER_IDLE = 1,
STATE_INIT_BLIND,
STATE_INIT_SUPERVISED,
STATE_INVOKE_BLIND,
STATE_INVOKE_SUPERVISED,
STATE_TRANSFER_LAST = STATE_INVOKE_SUPERVISED
} transfer_states_e;
typedef enum states_e {
/* Initial state */
STATE_IDLE = STATE_TRANSFER_LAST + 1,
STATE_NULL,
.
.
.
STATE_LAST = ...
} states_e;
Все остальное не будет работать хорошо, когда вам нужно новое состояние (передача).Конечно, это немедленно изменит все предыдущие значения.И если вы утверждаете, что ваше программное обеспечение никогда не изменится, у меня есть мост в Бруклине, чтобы продать вас.