BOOL vs bool
-
Ich habe eine Variable bool auf den Wert einer Funktion gesetzt die BOOL zurückliefert und immer die folgende Warnung bekommen:
warning C4800: 'BOOL': Variable wird auf booleschen Wert ('True' oder 'False') gesetzt (Auswirkungen auf Leistungsverhalten möglich)
Zuerst habe ich nicht verstanden warum die Zuweisung von true und false an BOOl ein Problem sein soll, bis ich in die WinDef.h geschaut habe:
typedef int BOOL;
Wo zur Hölle ist der Sinn BOOL als int zu definieren?
-
int ist schneller als bool
-
BOOL ist ein Windows typedef und kommt aus C (89+) Zeiten, da gab es kein "richtiges" bool und deswegen musste halt ein int herhalten. Je nachdem ob du jetzt ein C++ bool verwenden möchtest, oder ob ein WinAPI BOOL reicht, schreib halt foo() != 0; oder definiere die Variable als BOOL.
-
Danke für die Antworten.
-
ignoriere ää
-
wer mich ignorieren soll entscheide immer noch ich
-
du entscheidest gar nix.
-
Fehler werden in C gerne mit Fehlercodes identifiziert, deren Wert immer kleiner 0 ist. Eine erfolgreiche Abarbeitung wird je nach Systen gerne mit 0 oder größer gleich 0 identifiziert. Und genau das kann in einem BOOL Datentyp stecken.
Der Datentyp HRESULT ist in dieser Hinsicht dem Datentyp BOOL ähnlich. Fehlerwerte sind kleiner 0, siehe FAILED() Makro, während eine erfolgreiche Abarbeitung durch größer gleich 0 signalisiert wirde (siehe SUCCEEDED() Makro).
-
Bitte ein Bit schrieb:
Fehler werden in C gerne mit Fehlercodes identifiziert, deren Wert immer kleiner 0 ist. Eine erfolgreiche Abarbeitung wird je nach Systen gerne mit 0 oder größer gleich 0 identifiziert. Und genau das kann in einem BOOL Datentyp stecken.
Hast du dafür Beispiele aus dem MSDN? Würde mich doch sehr wundern, da hätten sich doch gleich HRESULT, INT, oder sonst was nehmen können. BOOL impliziert doch geradezu, dass der Wert nur auf != 0 geprüft werden soll.
-
Entschuldigung hast Recht.
Ich komme da wohl gewaltig mit den Fehlercodes durcheinander...