Am Don, 2003-06-26 um 13.41 schrieb Ralf Corsepius:
Am Don, 2003-06-26 um 12.08 schrieb Konrad Neitzel:
Adalbert Michelic
," schrieb: adalbert@pepe:/tmp > gcc -o sizeof sizeof.c adalbert@pepe:/tmp > ./sizeof sizeof(char) = 1 sizeof(short) = 2 sizeof(double) = 8 sizeof(long) = 4 Darüberhinaus können die Grössen sogar noch von Compiler-Flags abhängen, weshalb jede hard-codierte Grössenanname in Programmcode per Definition als Programmierfehler anzusehen ist (Einer *der* weitest verbreiteten Fehler und Portabilitätsprobleme)
In modernem Code sollte man für Typen fester Grösse statt char, short etc. die in stdint.h definierten Typen int8_t, int16_t usw. verwenden. (stdint.h ist neuerer POSIX-Standard und auf allen halbwegs aktuellen POSIX-kompatiblen Systemen vorhanden).
Habe mir mal die stdint.h angesehen und kann mir unter int8_t z.B. den Wertebereich ansehen. Wenn aber diese Variable nun als int_8t, int16_t oder int32_t abgespeichert wird, dann bleibt für mich noch die Frage, wenn die Variable den Wert 0 enthält, wieviele Bytes finde ich dann in der Datei im Datensatz. Betrag1 = int32_t Wert 12.345.678.90 (die Punkte nur wg der besseren Übersicht. Und nun die Frage: Sind es 32 Bits = 2 Bytes oder sind es 4 oder 8 Bytes. Es handelt sich bei der Datei nicht um eine Textdatei, sondern um kumulierte Buchhaltungsdaten. Es gibt kein Satzendezeichen und die Sätze sind verschieden lang. Die Sätze werden nur durch ihre Satzart 4 Stellen Textfeld definiert Eine alte Index-Sequentielle Datenbank
Und wenn wir mal pedantisch sein wollen, es gibt auch Systeme auf denen der ein oder andere "Fixed-Size"-Typ nicht vorhanden ist. Diese sind zwar selten anzutreffen und im Linux/Unix-Umfeld ziemlich bedeutungslos, doch es gibt sie.