bool ?



  • Hi!
    Ich weiß dass ist wohl eine totale Anfängerfrage aber ich stehe gerade auf der Leitung...(liegt wohl am Schlafmangel^^)
    Ich habe für bool-angaben bisher immer FALSE oder TRUE verwendet. Also in Großbuchstaben...

    Was auch immer funktioniert hat. Damals in der Schule und dann auch auf meinem Rechner...ABER ich hatte für meine Projekte außerhalb der Schulaufgaben (weil ich eigene Fenster erzeugt habe) bisher immer die "windows.h" in meinem code und hab die einfach mal für eine Konsolenanwendung weggelassen...(!)...
    Und plötzlich bekomm ich vom Compiler das:

    error C2065: 'FALSE' : nichtdeklarierter Bezeichner
    error C2065: 'TRUE' : nichtdeklarierter Bezeichner
    

    Ich steh gerade ziemlich auf der Leitung...
    wenn ich <windows.h> einbinde funzt alles...
    Wenn ich allerdings "true" und "false" verwende und die stdio.h einbinde funktioniert es auch...(auch ohne windows.h)
    aber bei TRUE und FALSE + <stdio.h> bekomm ich die errors...

    Ich kann mich aber erinnern dass wir früher in der Schule <windows.h> nicht verwenden durften (da hat mein Prof immer gemeckert es sei unnötig...aber ich hab die MessageBox immer für Fehlermeldungen verwendet *g*)und trotzdem TRUE und FALSE verwendet haben...->und es gab keine Probleme...
    und plötzlich meckert mein MSVC herum...
    Wisst ihr wieso?

    MfG Kuldren



  • weil TRUE und FALSE in der windows.h definiert sind und nicht zu C++ gehören.

    Nimm einfach das kleingeschriebene, das braucht in C++ keinen Header und dein Editor sollte es auch bunt machen.

    (in C muss man aber stdbool.h einbinden)



  • weil TRUE und FALSE in der windows.h definiert sind und nicht zu C++ gehören.

    Nimm einfach das kleingeschriebene, das braucht in C++ keinen Header und dein Editor sollte es auch bunt machen.

    (in C muss man aber stdbool.h einbinden)

    Das hab ich mir auch gedacht...
    Aber in der Schule hat es ohne irgendwelche besonderne Header mit FALSE und TRUE funktioniert...deshalb war ich grad ein wenig verwirrt..
    Trotzdem danke für die Info!



  • welchen compiler hattet ihr denn in der schwule?



  • welchen compiler hattet ihr denn in der schule?

    MSVC 6.0



  • nimm einfach true und false. Das zufällig irgend wo in irgend einem Header von irgend einem prehistorischen C- oder C++-Code FALSE/TRUE definiert sind, sollte man der portabilität und Ästhetik zu liebe einfach ignorieren.

    Hier noch mal: FALSE/TRUE sind nicht Standard konform und prehistorischer Ballast einiger C- oder C++-Frameworks



  • Warum ärgerst du dich denn mit sowas rum?
    Schreib doch dann einfach

    #ifndef TRUE
    #define TRUE true
    #endif
    #ifndef FALSE
    #define FALSE false
    #endif
    


  • Hmm das ist doch schwachsin ... @Tobi3000... BOOL ist halt im Windowsheader als int definiert ... d.h. ist TRUE und FALSE als 1 und 0 definiert ... normal sollte man aber bool und true und false nutzen da nen int nen bissel mehr (4) Bits als nen bool (2) braucht ...



  • (D)Evil schrieb:

    da nen int nen bissel mehr (4) Bits als nen bool (2) braucht ...

    Whoa?



  • Wenn man lieber TRUE als true benutzt,ist es doch eine gute Alternative.

    Und bool ist nur ein Byte groß. 😉

    EDIT: Ach du hast Bits geschrieben.

    hmm ich glaub int ist aber 4 Bytes groß und bool 1 Byte.



  • Tobi3000 schrieb:

    Wenn man lieber TRUE als true benutzt,ist es doch eine gute Alternative.

    Nein, ist es nicht, denn damit verwendet man was, was nicht durch den Standard abgedeckt wird, obwohl man nicht muss. Außerdem ist es blöder zu schreiben.

    Zum Anderen schreib ich mal lieber nix^^ 😃



  • also bool hat 1 bit nämlich 1 oder 0.
    char hat 1 Byte nämlich 8 bits
    ein int hat 2 Byte nämlich 16 Bits...
    und ein float hat 4Byte nämlich 32 Bits
    und ein double hat 8 byte. Nämlich 64 Bits...



  • bool hat 1 BYTE.



  • Sqwan schrieb:

    also bool hat 1 bit nämlich 1 oder 0.
    char hat 1 Byte nämlich 8 bits
    ein int hat 2 Byte nämlich 16 Bits...
    und ein float hat 4Byte nämlich 32 Bits
    und ein double hat 8 byte. Nämlich 64 Bits...

    und auf einem anderen system. zB heutigen 32 bit x86er systemen sieht es komplett anders aus.



  • In C++ ist alles was addressierbar ist mindestens 1 Byte gross, daher auch bool. Und da jedes Byte in C++ per definitionem immer >= 8 Bitse haben muss ist das Verschwändung. Mir aber komplett Wurst 🙂
    Das "BOOL" von <windows.h> ist im übrigen ein typedef auf int, und auf "normalen" Maschinen daher 4 Byte gross.

    C++ erzwingt aber beim Schreiben dass in einem "bool" immer nur 0 oder 1 drinnen stehen kann (was auf BOOL ja nicht zutrifft). Solange man also nicht Pointer/Referenzen rumcastet und sich "deppert spielt" kann man davon ausgehen dass Tests wie "if(b == true)" sicher sind (was wieder auf BOOL nicht zutrifft).



  • Plotzenhotz: Der C++-Standard sagt überhaupt nix über die Byte-Größe.

    So, und nun die Lösung zu eurem Streitthema: Die Größe von bool hängt vom Zusammenhang und vielleicht sogar der Implementation ab :p



  • Michael E. schrieb:

    Plotzenhotz: Der C++-Standard sagt überhaupt nix über die Byte-Größe.

    Traurig aber wahr...
    Da wird immer über portablen Code gesprochen und dann kann man sich nichtmal darauf verlassen dass die Datentypen auf allen Systemen den gleichen Wertebereich abdecken.

    Gruß Spacelord



  • Spacelord schrieb:

    Michael E. schrieb:

    Plotzenhotz: Der C++-Standard sagt überhaupt nix über die Byte-Größe.

    Traurig aber wahr...
    Da wird immer über portablen Code gesprochen und dann kann man sich nichtmal darauf verlassen dass die Datentypen auf allen Systemen den gleichen Wertebereich abdecken.

    Gerade deshalb ist C++ auch auf so unterschiedlichen Systemen einsetzbar! Ne kleine Zusatzarbeit für den Programmierer ist es allerdings 😞



  • Äh.
    Blubb.
    Bin mir ziemlich sicher dass im C++ Standard (sinngemäss) steht dass ein Byte >= 8 Bit haben muss, die kleinste adressierbare Einheit der Maschine darstellt, und dass "char" genau ein solches Byte belegt.

    Steht dahier im übrigen auch so:
    http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.5

    Das bedeutet natürlich nicht dass das "echte" Byte der Maschine nicht < 8 Bit haben kann, bloss muss die C++ Implementierung das dann so "verstecken" dass das "C++ Byte" eben trotzdem wieder >= 8 Bit hat.

    Ich hab den Standard-Text leider nicht, sonst würde ich nachsehen.



  • Also laut meinem Buch hat bool 1 Byte, genau wie char...
    deshalb auch oft die Bitte "bool: Bitte ein bit"...*g*

    Typ Byte
    bool 1
    char 1
    short 2
    int 4
    float 4
    double 8

    Ich werde jetzt nur mehr true und false verwenden ohne typedef/define...
    Im Nachhinein betrachtet: Echt seltsam dass in irgendeinem uralten Header
    TRUE und FALSE definiert sind...Egal...
    Ich will mich nicht auf Zufälligkeiten verlassen müssen...
    Danke nochmal...stand echt auf der Leitung..*g*



  • Plotzenhotz schrieb:

    Äh.
    Blubb.
    Bin mir ziemlich sicher dass im C++ Standard (sinngemäss) steht dass ein Byte >= 8 Bit haben muss, die kleinste adressierbare Einheit der Maschine darstellt, und dass "char" genau ein solches Byte belegt.

    Steht dahier im übrigen auch so:
    http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.5

    Dann ist das wieder so eine von C geerbte Garantie (wie zum Beispiel auch die Mindestgröße von int).

    Kuldren schrieb:

    Im Nachhinein betrachtet: Echt seltsam dass in irgendeinem uralten Header
    TRUE und FALSE definiert sind...

    Nö, bool ist eben erst sehr spät als Built-in in die Sprache reingekommen.


Anmelden zum Antworten