W.S. schrieb:
> Nop schrieb:
>> Typen mit define zu definieren, sollte man generell lassen. Dafür gibt's
>> typedef.
>
> Ach wo. Eigentlich ist das egal, ob die Ersetzung beim Präprozessor oder
> etwas weiter hinten erfolgt.
>
> Dieses Wort "typedef" suggeriert einem, daß man damit Typen definieren
> könnte, aber das ist FALSCH. Mit typedef kann man lediglich einem
> bereits vorhandenen Typ einen zweiten Namen geben.
>
> Ob man sowas wirklich gut findet, ist Geschmackssache. Ich halte typedef
> für herzlich überflüssig. Da wären zuvor ganz andere Dinge in C
> verbesserungswürdig.
>
> W.S.
Falsch:
1 | #define defined_type_t unsigned char*
|
2 | typedef unsigned char *typdef_type_t;
|
3 | |
4 | int main(void) {
|
5 | unsigned char c;
|
6 |
|
7 | typdef_type_t t_a, t_b;
|
8 | defined_type_t d_a, d_b;
|
9 |
|
10 | t_a = &c; /* kein problem */
|
11 | t_b = &c; /* kein problem */
|
12 | d_a = &c; /* kein problem */
|
13 | d_b = &c; /* Fehler! */
|
14 |
|
15 | return 0;
|
16 | }
|
liefert natürlich
1 | 13:8: error: assigning to 'unsigned char' from incompatible type 'unsigned char *'; remove &
|
2 | d_b = &c; /* Fehler! */
|
3 | ^~
|
Wenn du jetzt sagst, dass man so etwas nicht macht: doch, es gibt Leute,
die das genau so schreiben.
Natürlich gibt es auch häufig typedefs auf Pointer, wenn man zum
Beispiel den Inhalt einer Struct verbergen will.
Typedef macht also sehrwohl Sinn.
Mit freundlichen Grüßen,
N.G.