typeof ist eine GNU-C Erweiterung.
Es liefert den Typ einer Variablen:
Code:
int a;
// Definiere b als Objekt vom gleichen Typ wie a
typeof (a) b;
An der Stelle könnte man natürlich auch "int" anstatt "typeof(a)" direkt hinschreiben. Aber man kennt den Typ nicht immer.
Nehmen wir mal an, du willst ein Makro SWAP schreiben, das 2 Variablen tauscht:
Code:
#define SWAP(a,b) \
do { \
typeof (a) __dummy = a; \
a = b; \
b = __dummy; \
} while(0)
Dann kannst du SWAP für alle Typen verwenden: int, unsigned int, float, char*, foo_t, was auch immer.
typeof kannst du auch verwenden zum Casten oder in sizeof:
Code:
typeof (foo) * pfoo = (typeof (foo) *) & foo;
Allerdings ist sizeof (typeof (x)) gleichbedeutend mit sizeof (x)
Lesezeichen