2.3 C-Erweiterungen im gcc
gcc bietet einige Konstrukte an, die nicht von ANSI C vorgeschrieben sind. Nachfolgend sind
einige wichtige solcher Konstrukte beschrieben.
- Der Datentyp long long
- Der Datentyp long longsteht fuer eine Speichereinheit, die mindestens so viele
Bytes wie long umfasst. Auf 32-Bit-Plattformen ist long 32 Bit und long long
64 Bit gross. Auf 64-Bit-Plattformen sind sowohl long, als auch long long 64 Bit
gross; dasselbe gilt auf diesen Plattformen fuer Zeiger.
- inline-Funktionen
- Von dieser Art von Funktionen wird insbesondere in den Linux-Kernprogrammen Gebrauch gemacht.
Die Funktionen laufen so schnell wie Makros ab, da das Stackmanagement entfaellt, andererseits
bieten die inline-Funktionen die Vorteile von Funktionen (Typueberpruefung der Argumente,
Auswertung der Argumente vor dem Funktionsaufruf, ...) an. Programme die inline-Funktionen verwenden,
muessen wenigstens mit der minimalen Optimierung (-O bzw. -O0) kompiliert werden.
Zusaetzliche alternative Schluesselwoerter
gcc bietet eine Reihe von zusaetzlichen Schluesselwoertern an, die nicht von ANSI C vorgeschrieben sind.
Solche zusaetzlichen Schluesselwoerter werden von gcc in zwei Varianten angeboten: einmal das Schluesselwort
selbst (wie z. B. attribute) und zum anderen das Schluesselwort mit zwei vorangestellen und zwei
angefuegten Unterstricken (wie z. B. __attribute__). Wird gcc mit der Option -ansi aufgerufen,
kann er die zusaetzlichen normalen Schluesselwoerter nicht erkennen. Deshalb wurde zu jedem zusaetzlichen
Schluesselwort alternativ in den Headerdateien ein entsprechender Datentyp mit zwei vorangestellen und
zwei angefuegten Unterstrichen angeboten.
Das zusaetzliche Schluesselwort attribut ermoeglicht es, gcc mehr Informationen ueber eine
Funktion, Variable oder einen Datentyp zu geben, als dies mit den Standardkonstrukten von ANSI C moeglich
ist. Nachfolgend sind einige moegliche Attribute aufgefuehrt:
aligned legt fest, wie eine Variable oder Datenstruktur im Speicher anzuordnen ist.
packed legt fest, dass bei der Ausrichtung der Daten keine Luecken verwendet werden sollen.
noreturn legt fest, dass eine Funktion nie zum Aufrufer zurueckkehrt, was es gcc ermoeglicht,
besseren Code zu generieren.
Attribute fuer Funktionen muessen der Funktionsdeklaration hinzugefuegt werden, wie z. B.:
void function(int, flot) __attribute__((__noreturn__));
Das Schluesselwort __attribut__ ist nach den Funktionsparametern, gefolgt von dem zu setzendem
Attribut, das sich in doppelten Klammernpaaren befindet, anzugeben. Sollen mehrere Attribute gesetzt werden,
muessen diese mit Kommata getrennt werden, wie z. B.:
1 extern void ext3_panix (struct super_block *. const char *.
2 const char *, ...)
3 __attribute__ ((noreturn, format(printf, 3, 4)));
Diese Deklaration legt fest, dass ext3_panic in Zeile 1 nicht zur aufrufenden Funktion zurueckkehrt
und das die uebergebenen Argumente (ab dem dritten) wie bei der Funktion printf in Zeile 3 zu behandeln
sind: Das dritte Argumente legt den Formatierungsstring fest und das vierte Argument ist der erste zu
ersetzende Parameter im Formatierungsstring.
Spaeter werden weitere Attribute (z. B. beim Erzeugen von dynamischen Bibliotheken) vorgestellt. Alle
moeglichen Attribute stehen in der Manpage von gcc.
Zurueck || Index || Vor