Hallo zusammen, viele Programmierer definieren neu Datentypen: WORD32, u_int32, int32, U32, etc... wieso werden die "nativen" Datentypen von C/C++ redefiniert? wo ist der Sinn der Sache? ist es nur wegen Schreibarbeit zu sparen oder steckt ein anderer Sinn dahinter? z.B. typedef unsigned short WORD16; typedef unsigned long WORD32; typedef unsigned long DWORD; typedef unsigned char card8; typedef unsigned short card16; typedef unsigned long card32; typedef unsigned int card; typedef signed char int8; typedef signed short int16; Gruß
Einige C-Compiler für Embedded Plattformen sind noch nicht im 21. Jahrhundert angekommen und unterstützen keine C99 Datentypen. Dann bedient man sich mitunter solchen Workarounds. Die "cardX" Typen klingen für mich nach jemandem der aus der Pascal-Ecke kam ("cardinal" ist unsigned in Pascal). Eventuell ist der Code auch schon über längere Zeit historisch gewachsen. Früher war das üblich sobald man mehr als eine Plattform unterstützen musste.
Der Wertebereich mancher C-Datentypen ist halt nicht strikt geregelt und u.U. plattformabhängig. Ein
1 | int
|
z.B. muss laut Standard mindestens 16-bit haben, ist auf vielen Plattformen aber 32-bit. Hier kann man dann z.B. ein Makro (etwa INT16) je nach Zielplattform entweder als
1 | short
|
oder
1 | int
|
definieren (wenn man nicht die Standard-Header verwenden will oder kann). Weiterer möglicher Grund: Persönliche Vorlieben. :)
:
Bearbeitet durch User
Vielen Dank an euch beiden für die Antworten. Ist einiges klarer geworden. Gruß
Jim M. schrieb: > ("cardinal" ist unsigned in Pascal). in Pascal gibt's kein CARDINAL. Du meinst Modula II.
Der Vollständigkeit halber: Heutzutage macht man das korrekt mit uint16_t, int32_t, ... je nachdem was man braucht: https://en.cppreference.com/w/c/types/integer
Florian S. schrieb: > Der Wertebereich mancher C-Datentypen ist halt nicht strikt geregelt und > u.U. plattformabhängig. Und genau wegen diesem Murks fordern Coding-Standards, dass für jeden Compiler und Zielhardware Typdefs angelegt werden. So dass Variablen, die 16 Bit breit sein sollen auch 16 Bit breit sind, sogar nach einem Wechsel der Zielplatform und ohne das gesamte Programm zu ändern. Ein Beispiel wäre da der im Automobilbereich verbreitete MISRA Standard. Was da nicht gemacht wurde, ist verbindlich Namen für die Typedefs vorzugeben. Und so hast Du jetzt viele lustige Namensschemen. Viele Compiler bringen mittlerweile eine stdint.h mit, die solche Typedefs beinhaltet. Betriebssysteme nach Autosar Standard bringen Typdefs mit. Firmen oder Entwicklergruppen oder einzelne Entwickler legen ihr Schema fest. Und wär hätte das gedacht : 10 Ziffern, 2x26 Buchstaben und eine handvoll Sonderzeichen bieten genug Möglichkeiten, so dass alle Schemas etwas unterschiedlich ausfallen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.