Betrachten Sie den folgenden Code ein:Erzwingen Erfassung von C Präprozessormakro Wert
#include <stdio.h>
#define MACRO_A "early"
#define MACRO_B MACRO_A
#undef MACRO_A
#define MACRO_A "late"
#define MACRO_C MACRO_A
int main(void) {
printf("MACRO_B = %s, MACRO_C = %s\n", MACRO_B, MACRO_C);
return 0;
}
Ich erwartete, dass MACRO_B den Wert MACRO_A zum Zeitpunkt erfassen würde es definiert wurde, nämlich „früh“. Aber die oben genannten Code druckt:
MACRO_B = late, MACRO_C = late
Gibt es eine Möglichkeit MACRO_B zu zwingen, den Wert von MACRO_A zu der Zeit zu erfassen sie definiert ist? (NB: Bei Unklarheiten geht wir davon aus gcc
verwenden.)
Mein echten Anwendungsfall ist, dass ich eine einzelne Makro Form bin mit unterschiedlichen Ausdehnungen einer gemeinsamen Definition zu erzeugen: eine Erweiterung definiert die struct
Layout, eine Neudefinition erstellt die Initialisierer für die Struktur, usw. Dadurch kann ich alle Informationen an einem Ort zu halten.
Aus diesem Grund wäre es nützlich, die "aktuelle" Makroexpansion in einem weiteren Makro zu erfassen, so dass ich die ursprüngliche Definition wiederverwenden könnte, ohne ihren Zustand zu verlieren.
Nein. Die Makrosubstitution erfolgt nur mit den aktuellen Definitionen. Es wäre sonst nicht der C-Präprozessor. –
Ja, es scheint, dass dies wirklich ein Duplikat von http://stackoverflow.com/questions/34486726/c-preprocessor-evaluate-macro-early ist, und trotz der Fokussierung auf Ganzzahlen, ist es besser, die Frage zu beantworten . Gerne, diesen zu löschen ... –