>
> Die Division stört nicht, die macht der Compiler. Die Bestimmung der
> Arraygröße mit sizeof ist vor allem bei initialisierten Arrays von
> Vorteil, bei denen man die Größe nicht explizit angeben will.
> Außerdem fehlt bei "sizeof (mystruct)" das
> Schlüsselwort "struct", das ist nur in C++ nicht erforderlich.
OK. Besser ist es allerdings das ganze so zu schreiben:
1 | sizeof(array)/sizeof(*array)
|
Dadurch taucht der Datentyp in der Berechnung der Größe
überhaupt nicht mehr auf.
OK. Bei diesem Beispiel ist das vielleicht nicht wirklich
relevant, da sich der Datentyp von Array kaum ändern wird.
Aber hier geht es um die Gewöhnung an Coding Standards und
defensives Programmieren.
Nehmen wir den Fall
1 | int a[20];
|
2 | ...
|
3 | int j = sizeof(a) / sizeof(int);
|
ist zunächst mal richtig.
Jetzt kommt der Programmierer auf die glorreiche Idee,
dass ihm int nicht reicht und er das Array als double
Ausführen möchte.
Nur: Wie es der Teufel haben will, vergisst er auf die
Anpassung in der Größenberechnung (das kann schon mal
passieren, wenn Code größer wird)
1 | double a[20];
|
2 | ...
|
3 | int j = sizeof(a) / sizeof(int);
|
Kein Compiler kann diesen Fehler entdecken und glaub mir:
An solchen Sachen sucht man lange.
Hingegen
1 | int a[20];
|
2 | ...
|
3 | int j = sizeof(a) / sizeof(*a);
|
ist richtig
1 | double a[20];
|
2 | ...
|
3 | int j = sizeof(a) / sizeof(*a);
|
ist auch richtig.
Durch die Schreibweise kann ich den vorhergehenden Fehler
einfach nicht mehr machen -> ein vermeidbarer Fehler ist kein
Problem mehr.