Frage zu WinDef.h typedefs

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Frage zu WinDef.h typedefs

Beitrag 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.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Re: Frage zu WinDef.h typedefs

Beitrag 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:
ThinkPad T61 (in Gedenken) | PureBasic 4.61 B1 (32) | Windows 7 (32SP1) | ArchLinux (32) | Syllable (32)
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Frage zu WinDef.h typedefs

Beitrag 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:
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Re: Frage zu WinDef.h typedefs

Beitrag 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:
ThinkPad T61 (in Gedenken) | PureBasic 4.61 B1 (32) | Windows 7 (32SP1) | ArchLinux (32) | Syllable (32)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Frage zu WinDef.h typedefs

Beitrag 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.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Frage zu WinDef.h typedefs

Beitrag von edel »

Das ist das gleiche wie mit dem Typ Integer unter PB. Wuerdest du ueberall long benutzen, muesstest du den ganzen Code umschreiben.
Antworten