[gelöst]Was bedeutet: if(!variable)??



  • Hallo Community
    Ich bin fleissig am programmieren üben. Im meinem Buch ist ein Beispiel für einen Indateienschreibstream(langes Wort...). Man muss zuerst den Stream öffnen und dann so eine if-Bedingung dahintersetzen:

    if(!dat_aus)  //dat_aus ist der Ausgabestream
    {
    cout << "datei konnte nicht geöffnet werden";
    }
    

    dat_aus ist null, falls die Datei nicht geöffnet werden konnte. Also muss !dat_aus gleich true sein. Aber wieso das Ganze bzw. was sagt mir das Ausrufezeichen(ich weiss nur, dass das Ausrufezeichen ungleich bedeutet)?

    Abgesehen von dem Problem oben:
    Ist es richtig, dass alle Zahlen ausser 0 als false und 0 selber als true interpretiert werden, wenn man sie in irgendeine Bedingung schreibt?



  • ok if(!variable)
    das ausrufezeichen negiert den ausdruck für das if
    also wenn variable wahr ist wird sie durch das ausrufezeichen als falsch gemacht
    genauso wenn die Variable falsch ist dann wird sie als wahr gemacht also

    variable=true;
    if(!variable) = false
    variable=false;
    if(!variable) = true

    also simpel alles umdrehen falsch/wahr und wahr/falsch

    true=alles ausser 0 ist richtig
    false=0



  • if (dat_aus != 0)  //bedeutet dasselbe
    

    So ist leichter zu erkennen was gemeint ist:
    Wenn dat_aus ungültig ist, dann...

    "if (!dat_aus)" macht zwar dasselbe, sieht aber so aus wie:
    Wenn dat_aus == false, dann...

    Es ist also nicht so leicht ersichtlich, was gemeint ist.
    In der C++-Welt ist dies aber gängige Praxis, man sagt, weil
    die Programmierer zu schreibfaul sind.

    Gruß
    Don06



  • Vielen Dank für die schnellen Antworten. Ich verstehe jetzt, was damit gemeint ist.

    @Massiv:
    Man sollte am Ende jedes Programms ja ein return 0 zurückgeben. Wenn ich das von dir richtig verstanden habe, wäre das ja false(ausser das return 0 hat nichts mit true/false zu tun)?



  • ne, eigentlich nich.
    0 gibt man zurück, wenn alles gutgegangen ist, alle anderen werte verwendet man, um irgendwelche fehler zu melden, falls beim ausführen des programms etwas schief gelaufen ist



  • Man sollte am Ende jedes Programms ja ein return 0 zurückgeben. Wenn ich das von dir richtig verstanden habe, wäre das ja false(ausser das return 0 hat nichts mit true/false zu tun)?

    du kannst zurückgeben was du willst, mit der 0 assoziiert man aber imho am ehesten, dass kein fehler aufgetreten ist.



  • Andrey schrieb:

    ne, eigentlich nich.
    0 gibt man zurück, wenn alles gutgegangen ist, alle anderen werte verwendet man, um irgendwelche fehler zu melden, falls beim ausführen des programms etwas schief gelaufen ist

    Danke, somit ist alles klar und der Thread kann eigentlich schon geclosed werden.



  • Hier noch eine Ergänzung:

    Im Fall der Streams bedeuten "!dat_aus" und "dat_aus != 0" aber nicht dasselbe, da beim Stream der operator !() umdefiniert wurde.
    Mit "dat_aus != 0" würde überprüft, ob ein Stream ungleich null ist, doch diese Operation ist gar nicht definiert, so daß es einen Compiler-Fehler geben wird.

    Nur bei einfachen Datentypen (int, float, Pointer etc.) stimmt obige Aussage (von Don06).



  • Th schrieb:

    Mit "dat_aus != 0" würde überprüft, ob ein Stream ungleich null ist, doch diese Operation ist gar nicht definiert, so daß es einen Compiler-Fehler geben wird.

    Ob du es glaubst oder nicht, aber auch bei Streams funktioniert die Abfrage "dat_aus!=0" (der Stream besitzt einen operator void* , der NULL zurückgibt, wenn er in fail()-Status ist - und dieser void* kann mit 0 verglichen werden)).


Anmelden zum Antworten