Imagine Ich möchte #define
ein Makro, so dass es gleich aktuellen Wert eines anderen Makros ist (wenn ein solches Konzept existiert).Kann ich den zugrunde liegenden Wert eines Makros beim Definieren eines anderen Makros erfassen?
Zum Beispiel:
#include "def_a.h" // defines macro A
#define B A
Dies definiert B
A
zu sein. Wenn A
später die Definition ändert (d. H. Durch eine Neudefinition), ändert sich auch der Wert von B
(weil B
am Anwendungsort auf A
expandiert, was sich weiter auf den neuen Wert A
ausdehnt).
Was ich möchte, ist eine Möglichkeit, zu „backen in“ den Wert von A
in B
so dass B
erweitert nur auf den Wert von A
, nicht A
selbst.
Zum Beispiel:
#define A first
#define B BAKE_IN(A)
#undef A
#define A second
#define C BAKE_IN(A)
#undef A
#define A third
// here I want B to expand to first, and C to expand to second
Natürlich BAKE_IN
ist nicht eine reale Sache, aber ich frage mich, ob es irgendeine Art und Weise ist diese Wirkung zu erzielen.
Jetzt habe ich nicht wirklich gesagt, was passieren soll, wenn A selbst in Bezug auf andere Makros definiert ist, aber ich bin OK sowohl mit "einer Ebene der Erweiterung" (dh B bekommt den Wert von A erweitert wird , also bleiben weitere Makros übrig) und auch "volle Expansion" (dh A ist vollständig rekursiv expandiert, so wie es an einem Verwendungsort wäre).
Warum Sie die zu viel Pflege Schritte der Substitution und nicht über das Endergebnis. '#define B A' ist ausreichend, um den Wert von A zu erhalten, aber mit zwei Schritten. Die Anzahl der Upvote zu sehen, bekam nicht, was ich hier vermisse. Ich habe das Gefühl, dass Sie den langen Weg nach Rom nehmen wollen. – Sabrina
Ok, ich war mir nicht sicher ... weiß jemand, wie man eine Frage als Duplikat kennzeichnet, ohne sie zu schließen? –
Soweit ich weiß, schließen sich diese gegenseitig aus.Wenn eine Frage als Duplikat gekennzeichnet ist, wird sie mit dem kleinen Banner oben geschlossen, das Sie zu der alten Frage führt. – BeeOnRope