Есть ли способ компиляции для обнаружения/предотвращения дублирования значений в перечислении C/С++?
Ловушка заключается в том, что имеется несколько элементов, которые инициализируются явными значениями.
Фон:
Я унаследовал некоторый код C, например:
#define BASE1_VAL (5)
#define BASE2_VAL (7)
typedef enum
{
MsgFoo1A = BASE1_VAL, // 5
MsgFoo1B, // 6
MsgFoo1C, // 7
MsgFoo1D, // 8
MsgFoo1E, // 9
MsgFoo2A = BASE2_VAL, // Uh oh! 7 again...
MsgFoo2B // Uh oh! 8 again...
} FOO;
Проблема заключается в том, что по мере роста кода и по мере того, как разработчики добавляют больше сообщений в группу MsgFoo1x
, в конце концов он переполняет BASE2_VAL
.
Этот код в конечном итоге будет перенесен на С++, поэтому, если есть только С++-решение (магия шаблона?), это нормально - но решение, которое работает с C и С++, лучше.