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