3 Stimmen

C-Präprozessormakros: Prüfung, ob Token deklariert wurde

Dies ist für die C Präprozessor-Experten:

Wie kann ich eine enum mit einer Liste einiger Bezeichner und später bei der Switch-Anweisung prüfen, ob ein Bezeichner in der Liste enthalten war?

Ein Beispiel dafür, was ich brauche:

typedef enum { e1, e2, e3, e4, e5, e6 } e;

e x;
switch (x) {
#if DECLARED_IN_ENUM (e1)
  case e1 : ...
#endif
  /* etc. */
}

Ich dachte daran, eine Boost-Sequenz zu verwenden und sie in eine kommagetrennte Liste in der Aufzählung zu erweitern, aber wie kann ich später überprüfen, ob die Sequenz ein bestimmtes Token enthält?

EDIT : Was ich mit Boost erreichen konnte, ist:

#define e1 e1
#define e2 e2
#define e3 e3
#define e4 e4
#define e5 e5
#define e6 e6
#define E (e1)(e2)(e3)(e4)(e5)(e6)

typedef enum { BOOST_PP_SEQ_ENUM(E) } e;

e x;
switch (x) {
#if defined (e1)
  case e1 : ...
#endif
  /* etc. */
}

Das ist nicht sehr schön, und ich würde etwas vorziehen wie:

#define E (e1)(e2)(e3)(e4)(e5)(e6)

typedef enum { BOOST_PP_SEQ_ENUM(E) } e;

e x;
switch (x) {
#if BOOST_PP_SEQ_CONTAINS (e1,E)
  case e1 : ...
#endif
  /* etc. */
}

aber wie konnte BOOST_PP_SEQ_CONTAINS umgesetzt werden?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X