[Python-de] Python als Makroersatz, und was zum Lachen

Gerson Kurz Gerson.Kurz at t-online.de
Mit Jul 30 18:07:15 EDT 2003


Gegeben einen C-Header, der aus Zeug wie dem folgenden besteht:

DECLARE_STRING(IDS_XYZ_STATUS_BUSY, "Busy")
DECLARE_STRING(IDS_XYZ_STATUS_COVER_OPEN, "Cover open")
DECLARE_STRING(IDS_XYZ_STATUS_DOOR_OPEN, "Door open")
....(usw, viele hundert Zeilen lang)...

möchte ich eine Datei erzeugen, die so ausschaut:

[IDS_XYZ_STATUS_BUSY]
"Busy"

[IDS_XYZ_STATUS_COVER_OPEN]
"Cover open"

[IDS_XYZ_STATUS_DOOR_OPEN]
"Door open"...

Dachte ich mir, kopierst du den Auszug in ein Pythonscript und schreibst

def DECLARE_STRING(irgendwas, blabla):

aber das ist ein Schmarrn, weil, die IDs sind nicht natürlich - äh -
natürlich nicht definiert. Nun bin ich ja, die Herren Gläubigen des
Templategötzens mögen es mir verzeihen, Senior-Makrologe und schreibe gerne
Sachen wie

#ifdef IMPORT_BUILD

#define DECLARE_STRINGS(__NAME__,__CONTENT__) \
extern const char* __NAME__;

#else

#define DECLARE_STRINGS(__NAME__,__CONTENT__) \
const char* __NAME__ =
__CONTENT;

#endif

Nun heisst es ja immer, mit Python könne man alles Makromäßige umsetzen -
wie aber mache ich sowas? Ich will ja praktisch auf der Fliege ("on the
fly"), neue Variablen erzeugen.

Wäre es möglich, sich in den Name Lookup der Variablen zu hängen, so daß man
z.B. bei Undeclared Identifier die Möglichkeit hat, sich 'ne neue
anzuschaffen?

Zum lachen: Guckst du Google, suche nach Q246772, klickst du auf die
MSDN-Seite.

HOWTO: Retrieve and Set the Default Printer in Windows

Beachte

- die Länge des Beispielcodes im Vergleich zur schier
unglaublichen!!!!!!!!1! Schwere der Aufgabe

- und, vor allem, die Anmerkungen zum Code darunter