kein durchblick

frager

Erfahrenes Mitglied
eine typische anfägerfrage:
Wieso gibt es in c/c++ so viele Makros mit verschiedenen Namen die alle das gleiche sind. Hätte man sich nicht auf eine Definition eingien können.
Ich finde dass das vor allem bei primitiven datentypen wie int, long usw völlig überflüssig ist. Mir fallen jetzt spontan keine Beispiele ein, aber man braucht nur in windef.h u.ä. reinzuschauen.
Sind die anderen Namen echt notwendig oder hab ich was falsch verstanden
 
int oder unsigned int sind für sich genommen nicht besonders informative Bezeichnungen. Die 16 oder 32 oder auch 64 Bit, die ein int beinhaltet können Informationen vollkommen unterschiedlicher Art beinhalten. Da ist es schon praktisch, wenn man anhand eines sinnvoll benannten Makros für den Typ (oder besser noch eines Typedefs) erkennen kann, welche genauere Bedeutung der Datentyp eigentlich hat.

Abgesehen davon sind die Datentypen, die in deiner Entwicklungsumgebung anscheinend identisch sind, nicht zwangsläufig auch in jeder anderen Umgebung gleich. Ein int muss nicht immer genauso gross sein wie ein LONG, und ein bool ist etwas anderes als ein BOOL . Mit unterschiedlichen Defines (oder besser Typedefs) lässt sich dann ein Code leichter an eine andere Umgebung anpassen.

BOOL ist übrigens ein gutes Beispiel für einen Datentyp, der durch ein Makro genauer erklärt wird. Als Rückgabewert einer Funktion drückt er aus, dass nur über Erfolg oder Misserfolg der Funktion informiert wird, nicht aber z.B. über -- sagen wir mal -- die Anzahl von Zeichen in einer Datei, was bei einem puren int auch denkbar wäre.

Einige dieser Makros sind aber sicher noch Relikte aus früheren Zeiten. In einer C++-Umgebung macht ein BOOL wenig Sinn, da C++ den eingebauten Datentyp bool zu Verfügung stellt. Aus Kompatibilitätsgründen muss das bei der Windows-API beliebte BOOL jedoch beibehalten werden.
Der WPARAM (als Parameter einer Windows-Message) -- unter 16-Bit-Windows ein Word-Parameter, ist seit Win95 auch 32 Bit gross. Der LPARAM (Long-Parameter) hat jedoch bisher seine Bitzahl behalten.
 
Zurück