Wie man ein Makro mit seiner vorherigen Definition neu definiert

8

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

    
jackhab 21.06.2010, 13:31
quelle

5 Antworten

3

Selbstreferentielle Makros funktionieren überhaupt nicht:

Ссылка

Wenn Sie an C ++ arbeiten, können Sie mit Template-Funktionen und Namespaces dieselben Ergebnisse erzielen:

%Vor%     
miquelramirez 21.06.2010, 13:47
quelle
6

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.

    
AProgrammer 21.06.2010 13:36
quelle
3

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 .

%Vor%     
Mike 21.06.2010 13:45
quelle
2

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%     
snv.dev 12.04.2013 08:29
quelle
0

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.

    
ereOn 21.06.2010 13:35
quelle

Tags und Links