Warning mit BOOL
-
Hi
Ich habe eine Funktion welche eine BOOL-Variable erwartet und die dann eine andere BOOL-Variabel zurückgibt.Funktion:
BOOL OpenPort(int nPortNumber, int nBaudrate, BOOL bHandshaking)
Ich rufe die Funktion wie folgt auf:
m_bRun=m_Kontroller1.OpenPort(atoi(XMLHandler.GetTag("Kontroller1","Port","")), atoi(XMLHandler.GetTag("Kontroller1","Baud","")));
Nun bekomme ich immer folgende Warnung:
warning C4800: 'BOOL': Variable wird auf booleschen Wert ('True' oder 'False') gesetzt (Auswirkungen auf Leistungsverhalten möglich)
Kann mir jemand sagen, was da nicht gut sein könnte und wie ich diese Warning wegbekomme???
Vielen Dank!
-
BOOL ist momentan ein typedef auf int. Die Warnung soll dich darauf hinweisen, dass du unter Umständen nicht geplant hast, einem Integer true/false oder einém bool einen Zahlwert zuzuweisen.
-
Vielen Dank!
Kannst du mir nun noch sagen, wo den das Problem liegt? Ich schreibe ja in einen BOOL True oder FALSE... wo liegt denn da das Problem?
-
m_bRun ist doch bool, nicht BOOL, oder?
-
kommt es auf gross und klein-schreibung an? Ist BOOL nicht gleich bool?
-
Ja, es kommt auf die Groß- und Kleinschreibung an.
true und false
bool
TRUE und FALSEBOOL
Wo ist eigentlich das dritte Argument in deinem Funktionsaufruf hin?
-
Das ist standartmässig uf FALSE... (Der Ausschnitt ist aus dem CPP-File)
-
sonnst geb mal in MS VC++ einmal bool und einmal BOOL ein, und gehts dann jeweils zu Definition, per Rechtsklick, Gehe zu Definition... dannn siehst de das da typedefine int BOOL steht.. heißt nix anderes wie int = BOOL... und mach das auchmal bei bool...
-
So ein Warning kann man übrigens ganz einfach loswerden, wenn man den Typ nicht ändern kann:
BOOL fGross = FALSE; bool fKlein = (fGross == TRUE);
Schon wird nicht mehr gemeckert.
-
BOOL ist wie gesagt wie ein int
bool nur ein bit d.h. 2 zustände (0,1)
BOOL kansnt du auch
BOOL hehe = 4; // das geht bool lol = 4; // vergiss es
-
mr_mfc schrieb:
bool nur ein bit d.h. 2 zustände (0,1)
Nein, ein Bit ist es mit Sicherheit nicht. Ausser du hast ein System, auf dem ein Byte nur ein Bit breit ist, dann ist das durchaus möglich. Dieser Fall ist aber unwahrscheinlich. bool ist einfach ein Datentyp, der zwei Zustände haben kann. Wie gross bool denn genau ist, ist implementationsabhängig.
mr_mfc schrieb:
bool lol = 4; // vergiss es
Das funktioniert übrigens wunderbar, auch wenn der eine oder andere Compiler eine Warnung wegen Ganzahl->bool Umwandlung ausspucken wird.