Hallo Martin,
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."
Ja, unrecht hatte er ja nicht, da steht ja "in der Regel" und nicht "zwingend". ;-) Und damals war es wohl wirklich noch die Regel.
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.
Ja, ok, ich habe das etwas zu einfach gezeichnet. Aber oft ist das bereits der wichtigste Schritt.
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.
Und für Datenaustausch gibt's bereitgestellte Funktionen / Standards. (Stichwort "Network Byte Order", htonl/ntohs, ...) Nur, weil es für verschiedene Teilaspekte, die man benötigt, weitere Abstraktionen gibt, heißt es nicht, dass andere Abstraktionen sinnlos/unnötig sind.
Generell halte ich es beim Programmieren so, dass ich versuche, so wenig wie möglich implizite Annahmen in meinen Quellcode einfließen zu lassen. Und das heißt eben auch, in C die dafür bereitgestellten Datentypen zu nehmen, weil mir da der Compiler bestimmte Dinge garantieren kann, die dann nicht irgendwann mal wieder zusammenbrechen. Natürlich gibt es Fälle, wo es viel zu aufwändig wäre, bestimmte Annahmen zu verlassen, an diesen Stellen versuche ich die Annahmen aber mit Kommentaren zu kennzeichnen. Aber die Verwendung von Typen wie size_t o.ä. hat in meinen Augen keine Nachteile, aber jenseits der Portabilität eben auch Vorteile, wie die ein meinen Augen bessere Lesbarkeit des Codes.
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.