C/C++ enums: Erkennen, wenn mehrere Elemente anzeigen, um denselben Wert

Gibt es einen compile-Zeit-Weg zu erkennen /verhindern, dass doppelte Werte in einer C/C++ Aufzählung?

Der Haken ist, dass sind mehrere Elemente vorhanden, die initialisiert werden, um explizite Werte.

Hintergrund:

Habe ich geerbt, einige C-code wie den folgenden:

#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;

Das problem ist, dass, wie der code wächst & Entwickler fügen Sie weitere Nachrichten an die MsgFoo1x Gruppe, die schließlich es overruns BASE2_VAL.

Dieser code wird schließlich migriert werden C++, so dass, wenn es ein C++-Lösung (template-Magie?), das ist OK-aber eine Lösung, die mit C und C++ ist besser.

InformationsquelleAutor Dan | 2010-04-05
Schreibe einen Kommentar