Zitat Zitat von frabe Beitrag anzeigen
Nur ist es nict immer so leichte, besonders wenn man bestehende Codes anpasst oder anch langer Zeit mal wieder anderweitig verwenden möchte.
Mit ein wenig Disziplin geht das schon. Das fängt damit an, daß man unsigned Typen vermeidet. Mathematisch machen sie keinen Sinn, eigentlich sind sie Bitfelder wie SFRs oder Bitsequenzen eines Übertragungsprotokolls. Darauf sollte man keine arithmetischen Operationen sondern nur logische Operatoren anwenden. Wenn man Werte daraus im Programm weiter verwenden will, sollte man sie so schnell wie möglich in Zahlen umwandeln. Man sollte generell mit Objekten, die keine Zahlen sind, nicht rechnen. Daher ist es auch unerheblich ob chars signed oder unsigned sind. 'a' + 'b' macht keinen Sinn, es mag zwar in C ein Ergebnis geben, in anderen Sprachen eher nicht. Die einzige arithmetische Operation die auf chars Sinn macht ist '0' + [0..9]. Sie liefert das Zeichen für die Ziffern 0 bis 9 und das unabhängig davon, ob chars signed oder unsigned sind oder der Zeichensatz ASCII oder EBCDIC ist. Wenn man aus Platz oder Geschwindigkeitsproblemen 8-Bit Variable für nötig hält, verwendet man int8_t. Will man auf allen Architekturen schnell sein, sollte man int_fast8_t verwenden.

Ansonsten ist ein int immer mindestens 16 Bit. Wenn man portabel programmiert, verlässt man sich nicht auf das Verhalten bei einem Über oder Unterlauf. Man sollte also nicht davon ausgehen, daß 32767 + 1 = -32768 ist. Wenn man das so will, sollte man es explizit so programmieren. Dann läuft das Programm auch, auf einem System mit 32 oder 64 Bit Integer. Wenn man so programmiert, kommt man sogar mit den klassischen C-Typen int, long int (32 Bit) oder long long (64 Bit) aus. Besser lesbar sind sicher die Typen aus stdint.h wie int32_t und int64_t.

Daß das geht, sieht man an vielen Programmen. Beim Umstieg von 32 auf 64 Bit mussten sie nur neu kompiliert und gegen die 64 Bit Library gelinkt werden. Wer aber trickst, Überläufe explizit einkalkuliert, Shifts verwendet statt zu teilen, oder zu addieren statt bitweise zu odern, hat da eher Schwierigkeiten.

MfG Klebwax