Forum: Mikrocontroller und Digitale Elektronik Datentypen: WORD32, u_int32, int32, U32 wieso?


von AGast (Gast)


Lesenswert?

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ß

von Jim M. (turboj)


Lesenswert?

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.

von Florian S. (sevenacids)


Lesenswert?

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
von AGast (Gast)


Lesenswert?

Vielen Dank an euch beiden für die Antworten. Ist einiges klarer 
geworden.
Gruß

von Markus F. (mfro)


Lesenswert?

Jim M. schrieb:
> ("cardinal" ist unsigned in Pascal).

in Pascal gibt's kein CARDINAL. Du meinst Modula II.

von Dr. Sommer (Gast)


Lesenswert?

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

von fop (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.