Angenommen, ich habe das folgende Makro:
%Vor%Jetzt möchte ich in bestimmten Dateien eine "erweiterte" Version dieses Makros verwenden, ohne seinen Namen zu ändern. Die neue Version untersucht die Funktionalität der ursprünglichen Version und macht noch etwas mehr Arbeit.
%Vor%Das gibt mir natürlich eine Warnung, aber warum bekomme ich 'xxx' in diesem Bereich nicht? Wie soll ich es richtig definieren?
EDIT: Ссылка sollte es möglich sein
Selbstreferentielle Makros funktionieren überhaupt nicht:
Wenn Sie an C ++ arbeiten, können Sie mit Template-Funktionen und Namespaces dieselben Ergebnisse erzielen:
%Vor%Nicht möglich. Makros können andere Makros verwenden, aber sie verwenden die Definition, die zur Maximierungszeit und nicht zur Definitionszeit verfügbar ist. Und Makros in C und C ++ können nicht rekursiv sein, daher wird das xxx in Ihrem neuen Makro nicht erweitert und wird als Funktion betrachtet.
Sie können die alte Definition des Makros nicht wiederverwenden, aber Sie können die Definition des Makros aufheben und die neue Definition vornehmen. Hoffentlich ist es nicht zu kompliziert zu kopieren und einzufügen.
%Vor% Meine Empfehlung ist die Definition eines Makros xxx2
.
Wenn wir den Typ des Parameters 'x' im Makro 'xxx' kennen, können wir das Makro in einer Funktion neu definieren und dann das Makro 'xxx' als Funktion definieren
Ursprüngliche Definition für das Makro 'xxx':
%Vor%Machen Sie in einer bestimmten Datei eine erweiterte Version des Makros "xxx":
%Vor%Es ist nicht genau das, wonach Sie fragen, aber es kann helfen.
Sie können #undef
einem Makro zuweisen, bevor Sie ihm eine neue Definition geben.
Beispiel:
%Vor%Ich habe jedoch noch nie von einem rekursiven Makro gehört (oder gesehen). Ich glaube nicht, dass es möglich ist.
Tags und Links macros c-preprocessor