[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 alsovariable=true;
if(!variable) = false
variable=false;
if(!variable) = truealso 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 istDanke, 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)).