Ich habe Code, der eine Menge von komplizierten # define Fehlercodes hat, die nicht einfach zu decodieren sind, da sie über mehrere Ebenen verschachtelt sind.Wie kann ich eine Liste von #define-Werten aus C-Code generieren?
Gibt es eine elegante Möglichkeit, eine Liste von #defines mit ihren endgültigen numerischen Werten (oder was auch immer sie sonst sein können) zu bekommen?
Als Beispiel:
<header1.h>
#define CREATE_ERROR_CODE(class, sc, code) ((class << 16) & (sc << 8) & code)
#define EMI_MAX 16
<header2.h>
#define MI_1 EMI_MAX
<header3.h>
#define MODULE_ERROR_CLASS MI_1
#define MODULE_ERROR_SUBCLASS 1
#define ERROR_FOO CREATE_ERROR_CODE(MODULE_ERROR_CLASS, MODULE_ERROR_SUBCLASS, 1)
Ich würde eine große Anzahl ähnlicher #defines haben ERROR passende _ [\ w _] +, die ich so aufzählen möchte, dass ich immer eine aktuelle Liste der Fehlercodes dass das Programm ausgeben kann. Ich brauche den numerischen Wert, weil das ganze Programm ausgedruckt wird (und nein, es ist keine Option, stattdessen eine Zeichenkette auszudrucken).
Vorschläge für gcc oder einen anderen Compiler wäre hilfreich.
Haben Sie in Erwägung gezogen, ** echte Konstanten ** anstelle von #defines zu verwenden? –
Das Ändern des Codes in "costs" wäre nicht praktikabel, da es von einer Quelle im Upstream-Bereich vererbt wird. – djs