Seite 1 von 1

Frage zu WinDef.h typedefs

Verfasst: 05.06.2011 21:11
von Mok
Hallo.
In der C-Headerdatei WinDef.h (wird automatisch mit windows.h inkludiert) finden sich alle möglichen Typedefs, unter anderem:

Code: Alles auswählen

typedef unsigned long       DWORD;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;
Meine Frage: Warum unsigned? Warum sollten DWord, Byte und Word keine negativen Werte speichern können?

Gruß, Mok.

Re: Frage zu WinDef.h typedefs

Verfasst: 05.06.2011 21:45
von shadow
Hi,

1. Fehler präventiv vermeiden.
2. Größerer Wertebereich
bei unsigned char z. B. statt nur von -127/128 die vollen 255 nutzen (wichtig wenn du z. B. eine Datei byte für byte einlesen möchtest).
3. mehr fällt mir im Moment nicht ein ... aber es macht auf jeden Fall Sinn :wink:

Re: Frage zu WinDef.h typedefs

Verfasst: 05.06.2011 22:46
von Mok
@shadow:
1. Hä?!
2. Der Wertebereich bleibt doch gleich groß, ich kann in jedem Fall 256 Zahlen nutzen (beim Einlesen einer Datei lass ich's mir ja einreden)
3. Für mich ergibt das irgendwie keinen Sinn, in PB kann ich in Bytes negative Werte speichern, also will ich das in C auch :mrgreen:

Re: Frage zu WinDef.h typedefs

Verfasst: 05.06.2011 22:53
von shadow
1. Wenn dein Programm nur positive Werte erwartet, so wird das sichergestellt. Du kannst z. B. einem BYTE keine -1 zuweisen.
Wie das jetzt genau unter C/C++ gehandhabt wird bin ich mir nicht sicher, weil es schon zu lange her ist. Ich glaube mich zu erinnern, dass da eine assertion failed Exception ausgelöst wird...
2. Der Wertebereich bleibt nicht gleich. Wie gesagt, du kannst keine negativen Werte zuweisen. Und außerdem entfällt dir dann die umständichen Bit-Operationen um dann aus einem negativen byte ein vorzeichenloses byte zu kriegen. So kannst du auf simple weise mit einem Integer Werte nicht nur bis 2,4 Milliarden sondern gleich auf fast 5 Mrd. zuweisen (z. B. in der Buchführung, wo es keine negativen Werte gibt sondern diese als Soll/Haben-Buchungen referenziert werden).
3. Unsere Urväter haben sich dieses Konzept ausgedacht noch lange bevor es Windows und die WinAPI gegeben hat. Ich denke da müsste ein noch tieferer Sinn dahinter stecken, sonst könnten wir sagen "So ein Blödsinn die Story mit dem Rad, wir fliegen doch und brauchen dieses Ding gar nicht...". Ich bin leider nicht philosophisch/akademisch genug angehaucht, so dass ich es dir auf andere Weise vermitteln könnte :mrgreen:

Re: Frage zu WinDef.h typedefs

Verfasst: 06.06.2011 01:47
von NicTheQuick
3. Für mich ergibt das irgendwie keinen Sinn, in PB kann ich in Bytes negative Werte speichern, also will ich das in C auch :mrgreen:
Du kannst in C noch viel mehr Typen nutzen als es in PB gibt. Diese Typedefs sind nur etwas optisches. Genauso gut könnte man statt BYTE auch einfach überall uchar oder uint8_t nutzen.
Warum gerade DWORD, BYTE und WORD keine negativen Werte besitzen sollen, hängt immer noch davon ab, wo sie benutzt werden. Womöglich machen an den Stellen, an denen sie benutzt werden, negative Werte keinen Sinn. Zum Beispiel String- und Bufferlängen, ASCII-Codes und ähnliches. Vermutlich werden diese Datentypen nur der Übersichtlichkeit halber definiert, damit sie später in der API-Referenz besser aussehen oder man sich das einfacher merken kann. Keine Ahnung. Die Namen sind so einfach sprechender.

Re: Frage zu WinDef.h typedefs

Verfasst: 06.06.2011 22:38
von edel
Das ist das gleiche wie mit dem Typ Integer unter PB. Wuerdest du ueberall long benutzen, muesstest du den ganzen Code umschreiben.