Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Funktionen und Makros

&pagelevel(3)&pagelevel

Die meisten Bibliotheksfunktionen sind als C-Funktionen realisiert, einige als Makros. Einige Bibliotheksfunktionen sind sowohl als Funktion als auch als Makro realisiert (siehe Liste unten).

Gibt es eine Bibliotheksfunktion in beiden Varianten, wird für den Aufruf standardmäßig die Makrovariante generiert. Ein Funktionsaufruf wird dann generiert, wenn der Name in Klammern () eingeschlossen oder mit der #undef-Anweisung aufgehoben wird.
Welche Ausführung Sie jeweils wählen, hängt davon ab, ob und welche Aspekte(Performance, Programmgröße, Einschränkungen) jeweils für das Programm relevant sind.

Eine Funktion ist ein nur einmal vorhandener, übersetzter Programmteil (Modul) und wird zum Ablaufzeitpunkt wie ein externes Unterprogramm behandelt. Für jeden Funktionsaufruf („function-call“) ist bei Programmablauf ein Organisationsaufwand notwendig; z.B. das Verwalten der lokalen, dynamischen Daten einer Funktion im Laufzeitstack, Sichern der Registerinhalte, Rücksprungadressen etc.

Gesteuert über Compileroptionen zur Optimierung können einige Bibliotheksfunktionen inline generiert werden. In diesem Fall wird der Funktionscode direkt in die Aufrufstelle eingesetzt und es entfallen die o.g. Verwaltungsaktivitäten.
Derzeit können folgende Funktionen inline generiert werden: strcpy, strcmp, strlen, strcat, memcpy, memcmp, memset, abs, fabs, labs.

Weitere Einzelheiten hierzu finden Sie in den Benutzerhandbüchern zu den Compilern C, C++ oder C/C++.

Ein Makro ist ein mit der #define-Anweisung definierter Quellprogrammteil. Mit jedem Makro-Aufruf wird bei der Übersetzung der Makro-Name im Programm durch den Inhalt des aufgerufenen Makros ersetzt.

Die Benutzung eines Makros kann zu einer besseren Performance bei Programmablauf führen, da die Verwaltungsaktivitäten des Laufzeitsystems (siehe Funktion) entfallen. Andererseits wird das übersetzte Programm wegen der Makroauflösungen größer.

Bei der Benutzung eines Makros sind außerdem die folgenden Punkte zu beachten:

  • Makronamen können anderen Funktionen nicht als Argument übergeben werden, wenn diese einen Zeiger auf eine Funktion als Argument verlangen.

  • Inkrement/Dekrement- oder zusammengesetzte Zuweisungsoperatoren für Makro-Argumente können zu unerwünschten Nebeneffekten führen.

  • Die Include-Datei, die die Makrodefinition enthält, muss auf jeden Fall in das Programm eingefügt werden.

 

Liste der Bibliotheksfunktionen, die als Makro bzw. als Makro und als Funktion realisiert sind:

Makro:

Funktion:


Makro:

Funktion:

clearerr

(clearerr)

                   

iswdigit

(iswdigit)

clock

(clock)


iswgraph

(iswgraph)

feof

(feof)


iswlower

(iswlower)

ferror

(ferror)


iswprint

(iswprint)

getc

(getc)


iswpunct

(iswpunct)

getchar

(getchar)


iswspace

(iswspace)

getwc

(getwc)


iswupper

(iswupper)

isalnum

(isalnum)


iswxdigit

(iswxdigit)

isalpha

(isalpha)


putc

(putc)

iscntrl

(iscntrl)


putchar

(putchar)

isdigit

(isdigit)


toebcdic

(toebcdic)

isebcdic

(isebcdic)


tolower

(tolower)

isgraph

(isgraph)


toupper

(toupper)

islower

(islower)


towlower

(towlower)

ispunct

(ispunct)


towupper

(towupper)

isspace

(isspace)


assert


isupper

(isupper)


offsetof


isxdigit

(isxdigit)


va_arg


iswalnum

(iswalnum)


va_end


iswalpha

(iswalpha)


va_start


iswcntrl

(iswcntrl)