Geändert: 8. 8. 2007, 09:17
Lange Sachen sind nicht gut
Wer heutzutage Software schreibt sollte sich Gedanken über die Portabilität machen. Mit mehreren Jahren Verspätung halten jetzt nämlich auch im PC-Bereich die 64 Bit-Architekturen, allen voran AMD64, Einzug. An dieser Schwelle gibt es nun einige Stolpersteine aufgrund der Datentypen, die zu beliebigen Problemen führen können. Deshalb hier ein kleiner Überblick:
OS | Linux | Windows | ||
---|---|---|---|---|
Architektur | x86 | AMD64 | x86 | AMD64 |
int | 32 | 32 | 32 | 32 |
long | 32 | 64 | 32 | 32 |
Wie man sehen kann wächst der long unter Windows nicht mit wie er das auf den meisten anderen Plattformen tut. Dahinter steckt keine Bösartigkeit, sondern gute Überlegung. Micro$oft will die Kompatibilität zwischen 32- und 64-Bit-Anwendungen erhalten. Auf diese Art lassen sich die Anwendungen durch einfaches Neucompilieren fast vollständig portieren. Die andere Interpretationsmöglichkeit, dass die meisten Windoze-Programmierer mit 64 Bit longs überfordert wären, lasse ich jetzt mal unter den Tisch fallen *eg*.
Wenn man einen 64 Bit langen Datentypen haben will steht die Compilererweiterung long long auf beiden Plattformen bereit. gcc unterstützt das schon seit Version 2.x, die neueren Windows-Compiler sollten es auch beherrschen. Ansonsten gibt es häufig auch definierte Typen wie int64 oder u64, letzteren insbesondere im Linux Kernel.
Also, wer Software schreibt die sowohl auf Windows als auch unter unixoiden Systemen auf verschiedenen Plattformen laufen soll sollte die Finger vom Datentyp long lassen. Er sollte nur verwendet werden wenn das die benutzten Funktionen (z.B. ftell() und fseek()) so verlangen. In allen anderen Fällen hilft kurzes Nachdenken und die anschließende Verwendung von int oder long long.