Hallo Martin,
Der korrekte Typ für eine Puffergröße wäre size_t anstelle von int.
klar, aber int ist der Basistyp für ganzzahlige Werte. Die Größe eines Speicherbereichs in Byte *ist* ein ganzzahliger Wert. Deswegen ist size_t ja identisch zu int deklariert.
Nein, ist es nicht. Auf bestimmten Systemen stimmt das im Spezialfall, aber nimm zum Beispiel Linux oder Windows auf x86_64 (64 bit) und da ist size_t äquivalent zu einer 64bit-Ganzzahl (unter Linux/x86_64 wäre das also äquivalent zu long, unter Windows/x86_64 äquivalent zu long long) während int auf diesen Systemen weiterhin eine 32bit-Ganzzahl ist.
Und diese Beispiele sind nicht irgendwie exotisch. Wenn Du Dir einen aktuellen Computer kaufst, ist da in der Regel nur noch 64bit-Windows dabei. Da läuft zwar auch noch 32bit-Code drauf, aber langfristig geht die Entwicklung weg davon.
Allein schon das Bestreben, hier einen eigenen Typ zu definieren, ist in meinen Augen eine unnötige Verkomplizierung.
Es geht hier um Portabilität: Der Typ size_t ist laut Standard so festgelegt, dass das *immer* für Puffergrößen u.ä. verwendet werden kann, während z.B. ptrdiff_t *immer* für Differenzen zwischen zwei Pointern verwendet werden kann. Genauso gibt's off_t für Positionen in Dateien (was z.B. auch auf einem 32bit-OS eine 64bit-Größe sein kann weil Dateien ja > 4 Gig sein können) und so weiter. Wenn man diese Typen an den korrekten Stellen verwendet, stellt man sicher, dass man den Code überall dort verwenden kann, wo es eine standardkonforme C-Implementierung gibt.
Außerdem haben diese speziellen Typen in meinen Augen einen weiteren wichtigen Vorteil: Sie geben klar zu erkennen, was man eigentlich für eine Art Variable an der Stelle wollte. Wenn ich irgendwo eine Variable des Typs "int" sehe, dann kann das alles mögliche sein. Bei size_t weiß ich aber, dass es sich um eine Puffergröße handeln soll, etc. Damit erkenne ich leichter an Hand des Typs, welche Annahmen ein bestimmtes Stück Code macht.
Viele Grüße,
Christian
Mein "Weblog" [RSS]
Using XSLT to create JSON output (Saxon-B 9.0 for Java)
How to tell the difference between a science fan and a scientist.