Code: Alles auswählen.
DEFINE
Grundform
DEFINE macro.
Wirkung
Definition eines unter dem Namen macro ansprechbaren Quelltext-Abschnitts (Makro). Ein als DEFINE-Makro abgelegter Quelltext-Abschnitt darf nur aus vollständigen Sätzen der Sprache ABAP bestehen.
Alle Makroverwendungen werden zur Übersetzungszeit textuell aufgelöst. Die Makrotechnik ist also ein Textersatz-Mechanismus zur Übersetzungszeit, kein Modularisierungs-Mechanismus zur Laufzeit.
Der Abschluß des Makros erfolgt durch die Anweisung END-OF-DEFINITION.
Bei der Definition eines Makros können Stellungsparameter mittels &n angesprochen werden (n = 1, 2, ..., 9). Bei der Auflösung einer Makroverwendung wird &n durch den n-ten aktuellen Parameter textuell ersetzt.
Beispiel
Es wird ein Makro namens "INCREMENT" definiert und anschließend im Programm verwendet.
DEFINE INCREMENT.
ADD 1 TO &1.
END-OF-DEFINITION.
DATA: NUMBER TYPE I VALUE 1.
...
INCREMENT NUMBER.
Hinweise
Im allgemeinen ist die Verwendung von Unterprogrammen ( FORM, FUNCTION) der Verwendung von Makros vorzuziehen, weil Unterprogramme - im Gegensatz zu Makros - durch alle Werkzeuge der Entwicklungsumgebung (Workbench, Debugging, Laufzeitanalyse, Laufzeitfehlerbehandlung, ...) unterstützt sind.
Es ist nicht möglich, innerhalb einer Makrodefinition ein weiteres Makro mit DEFINE zu definieren.
Es ist nicht zulässig, ABAP-Schlüsselworte als Makronamen zu verwenden.
Die Gültigkeit einer Makrodefinition wird ausschließlich durch ihre Position im Quelltext bestimmt. Ein Makro kann in allen auf die Definition folgenden Quelltextzeilen verwendet werden. Es gibt keine Unterscheidung zwischen globalen und lokalen Makros. Ob ein Makro außerhalb oder innerhalb eines Unterprogramms definiert ist, hat keine Bedeutung für seine Gültigkeit.
Wird ein Makro redefiniert, d.h. ein schon vorher verwendeter Makroname mit einer neuen Bedeutung versehen, so zieht ab der Redefinitionsstelle das Makro in seiner neuen Bedeutung.
Code: Alles auswählen.
END-OF-DEFINITION
Grundform
END-OF-DEFINITION.
Wirkung
Die Anweisung END-OF-DEFINITION schließt eine mit DEFINE eingeleitete Makrodefinition ab.
Code: Alles auswählen.
* kleines Makro
DEFINE MYINIT.
IF &1 IS INITIAL.
&1 = &2.
ENDIF.
END-OF-DEFINITION.
* Verwendung:
MYINIT s-zick 'X'.
MYINIT s-zack 123.
MYINIT s-murks 'Hallo'.
* Ausgeführt wird:
IF s-zick IS INITIAL.
s-zick = 'X'.
ENDIF.
IF s-zack IS INITIAL.
s-zack = 123.
ENDIF.
IF s-murks IS INITIAL.
s-murks = 'Hallo'.
ENDIF.