Unterschied zwischen BOOL und bool?



  • Was ist zwischen diesen anscheinend identischen Datentypen der Unterschied? VC7.NET meckert immer, wenn ich den einen auf den anderen schreibe.

    RadioButtons liefern ein BOOL, ich weise es einem bool zu.

    warning C4800: 'BOOL': Variable wird auf booleschen Wert ('True' oder 'False') gesetzt (Auswirkungen auf Leistungsverhalten möglich)

    Stellt das ein Problem dar?

    Selbst ein

    bool mybool = (bool)LiefertBOOLzurueck();
    

    brachte keinen Erfolg. Jetzt meckert er beim Typecast, statt bei der Zuweisung.



  • In den Microsoft-Headerdateien wird BOOL wie folgt definiert:

    typedef int BOOL;
    

    Zwar ist im C++-Standard festgelegt, dass bei Zuweisung von bool-Werten zu int-Variablen true nach 1 und false nach 0 konvertiert werden muss, dennoch gibt es eine Warnung, weil es von vielen als "unschön" empfunden wird, solche Zuweisungen zu benutzen.

    EDIT: Ach so, um das zu Umgehen kannst du entweder TRUE und FALSE verwenden, das sind die int-Äquivalente zu BOOL oder du nutzt den Datentyp BOOL oder schreibst es als Vergleichsausdruck.



  • bool mybool = LiefertBOOLzurueck() != 0;



  • zwette schrieb:

    Was ist zwischen diesen anscheinend identischen Datentypen der Unterschied?

    bool ist ein eingebauter C++ Datentyp, BOOL nicht.

    Die Warnungen kann man normalerweise ignorieren, da C++ genau festlegt, wie Konvertierungen zwischen bool und int durchgeführt werden müssen. Und diesbezüglich gibt es hier keine Probleme. Will man die Warnungen trotzdem wegbekommen, kannst du zB neben den Casts folgendes machen

    bool a = false;
    BOOL b = TRUE;
    a = b != FALSE;
    b = a ? TRUE : FALSE;
    

    Ist allerdings ziemlich unschön (imo).
    Bei dieser Warnung kann man deshalb durchaus mal überlegen, ob man sie nicht generell abschaltet.



  • groovemaster schrieb:

    Bei dieser Warnung kann man deshalb durchaus mal überlegen, ob man sie nicht generell abschaltet.

    Kannst Du mir sagen, wo ich das tun kann? Habe ja nirgendwo die Einstellungen gefunden. Überhaupt habe ich - außer vereinzelte Einstellungen in der Projektkonfiguration - keine Einstellungen zu Warnungen/Fehlern gefunden.



  • Deaktivier bitte die Warnung nicht.



  • zwette schrieb:

    Kannst Du mir sagen, wo ich das tun kann?

    Du musst das direkt im Quellcode machen.

    #pragma warning(default : xxxx) // Voreinstellung der Warnung setzen
    #pragma warning(enable : xxxx) // Warnung aktivieren
    #pragma warning(disable : xxxx) // Warnung deaktivieren
    

    xxxx steht hier für die vierstellige Zahl aus der Warnmeldung.
    Dennoch, bevor man auf diese Weise Warnungen deaktiviert, damit sie weg sind, sollte man vorher zweimal überlegen, warum die Warnung entsteht und wie man sie richtig korrigiert. Für mich sind Warnungen, bis auf einige Ausnahmen, im Grunde nichts anderes als kompilierbare Fehler.


Anmelden zum Antworten