Token-Parsing und Präprozesseorkonstanten

Hallo zusammen

Keine Ahnung ob ich das hier richtig wieder gebe, aber ich versuchs mal:

Ich möchte als Funktionsaufruf z.B. field_add() benutzen. Es ist aber eine Funktion implementiert, die field_char_add() heißt.

Jetzt soll per Präpro der Text filed_add durch das field_char_add ersetzen. Welcher Text da jetzt zwischen einfügt werden soll habe ich als Präpro-Konstante (durch ein #define) vorliegen.

Der Versuch

#define VARTYPE char

#define FDECL(func) field##\_##VARTYPE##\_##func

#define filed\_add FDECL(add)

bringt leider nur das Ergebnis field_VARTYPE_add, aber nicht das was ich eigentlich will. Er ersetzt die Präpro-Konstante nicht, obwohl sie vorher definiert wurde.

Ausprobiert hab ich das bisher mit dem VC5

Gruss Jens

bringt leider nur das Ergebnis field_VARTYPE_add, aber nicht
das was ich eigentlich will. Er ersetzt die Präpro-Konstante
nicht, obwohl sie vorher definiert wurde.

„The #define directive substitutes token-string for all subsequent occurrences of an identifier in the source file. The identifier is replaced only when it forms a token. For instance, identifier is not replaced if it appears in a comment, within a string, or as part of a longer identifier.“

Da der zu ersetzende Part Teil eines längeren Identifiers, kann somit nicht ersetzt werden.
Ich würde Dein Problem mit bedingter Compilierung lösen.

Grüsse Safog

Hi Safog.

Da der zu ersetzende Part Teil eines längeren Identifiers,
kann somit nicht ersetzt werden.

Kann es ein anderer Grund sein, das bei Makroaufrufen die Ersetzung der Konstanten nicht ganz sauber funktioniert?

Ich würde Dein Problem mit bedingter Compilierung lösen.

Das ist das Problem. Bei der Fülle an Variablentypen (incl. der Selbst definierten Strukturen etc.) läßt sich das nur schwer realisieren. Ich kann/darf kein C++ verwenden, sonst für ich Templates dafür nehmen.

Gruss Jens