Hi,
int soll die "natürliche" Datenbreite eines Systems wiedergeben.
Nein. Woher hast Du das?
aus meinem Studium. Ich hab hier noch das alte Script von Prof.Dr. Gerald Kampe aus seiner Vorlesung "Programmiersprachen" von 1991 als traditionellen Papierstapel, eben aus dem Schrank gekramt. Da heißt es:
"Der Datentyp int ist implementierungsspezifisch und entspricht in der Regel der natürlichen Wortbreite des System. Auf einem 16bit-System ist int also 16bit breit, auf einem 32bit-System 32bit."
Die Information, dass int auch auf 8bit-System üblicherweise 16bit breit ist, hat er geflissentlich weggelassen, so wie die Existenz von 8bit-CPUs für ihn sowieso auch damals schon irrelevant schien. Es gibt aber auch Compiler für kleine µCs, die int als 8bit-Typ definieren und long als 16bit.
Bis jetzt hatte ich also keinen Anlass, Kampes Aussage aus der Vorlesung anzuzweifeln.
Das heißt aber auch, dass derselbe Code, wenn er auf unterschiedlichen Plattformen compiliert wird, auch unterschiedliche Datenstrukturen erzeugt. Das ist nicht das, was ich unter Portabilität verstehe.
Portabilität heißt im Idealfall (!), dass Du das Programm nur ein einziges Mal schreibst und dann überall ohne Änderungen kompilieren kannst.
Das ist IMHO nur *ein* Aspekt von Portabilität.
Und andere Datenstrukturen hast Du doch eh: Wenn Du auf einem Big-Endian-System kompilierst, dreht sich die Byte-Reihenfolge um im Vergleich zu Intel.
Eben. Also nicht wirklich portabel. Zwar auf Quellcodeebene, aber nicht auf der Ebene des Datenaustauschs.
Ciao,
Martin
Wer im Glashaus sitzt, sollte Spaß am Fensterputzen haben.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(