für Datentypen typedef statt #define verwenden
13.04.2008
Author: N43
Verwendet man #define, um einem Datentyp einen anderen Namen zu geben, so kann das zu unerwartetem verhalten führen.
Betrachten wir dazu folgendes Beispiel:
CPP - Code:
#define d_type int*
int main()
{
d_type a, b;
int c = *a + *b;
}
Der Präprozessor läuft vor dem eigentlich Compile-Vorgang über den Code und erstellt aus dem obigen den folgenden Code:
CPP - Code:
int main()
{
int* a, b;
int c = *a + *b;
}
Versucht man den Code zu kompilieren, quittiert der Compiler den Versuch mit der Meldung:
Zitat:
test.c:9: error: invalid type argument of ‘unary *’
Warum wird klar, wenn man sich die Deklaration von a und b anschaut. Die Variable a ist vom Typ int*, also ein Pointer auf int. b hingegen ist vom Typ int, und kann deswegen nicht mit dem * Operator dereferenziert werden.
Setzt man nun typedef ein, so wird int* ein eigener Datentyp
CPP - Code:
typedef int* t_type;
int main()
{
t_type a, b;
int c = *a + *b;
}
Hier sind nun a und b beide zunächst vom Typ t_type. Der Compiler schaut nun in einer Liste der gemachten Typdeklarationen nach t_type und stellt fest, dass t_type int* entspricht.
Damit sind dann beide, a und b, vom Typ int* und können mit dem * Operator dereferenziert werden.
Deine Meinung ist gefragt:
Sei der Erste und teile uns Deine Meinung mit.
Kommentare