Frage zu Quellcode
-
Hallo ich lese gerade den Quellcode von jemanden andres und habe ein Frage hier der code
if ( Error = ChangeChipdisk( CHANGE_TO_CARDREADER ) ) // Change chipdisk to card reader { ProgControl = CHANGEERROR; } else { ProgControl = TRANSFER_DATA; }ProgControl ist ein status. So nun meine Frage : Kann "ProgControl " überhaupt in den else gesetzt werden. denn in der if schleife sthe ja kein vergleich sondern eine zuweisung. und liefert doch immer true zurück. oder täusche ich mich. vielen dank
-
Das Ergebnis der Zuweisung ist nicht, ob sie erfolgreich war, sondern der Wert des linksseitigen Operanden. D.h. der else-Zweig wird ausgeführt, wenn Error der Wert 0 bzw. false zugewiesen wird.
-
Wenn ChangeChipDisk einen "Fehler-Zeiger" zurückgibt kann dieser 0 oder nicht 0 sein ....
0 kein Fehler
nicht Null: Fehler und daher behandlungWenn es immer wahr wäre wäre auch ein if ohne else sinnlos!

-
ChangeChipdisk wird nen status zurückliefern.
0 = OK
1 = Error
(Geht auch mit pointern, k.A. ob dann das hier der Fall ist.)
Es findet erst die Zuweisung von ChangeChipdisk an Erro statt, dann wird Error ausgewertet.Aber schön find ich das so nicht. Wenn dann würde ich den Rückgabewert explizit vergleichen
if( ChangeDisk( CHANGE_TO_CARDREADER ) == Status::Error ) { usw...Denn wenn sich mal jemand denkt, dass 0 == Error mal ganz nett wäre musst du die ganzen Abfragen umbauen.
Außerdem meckert bei mir der GCC bei solchen Sachen gerne rum. Ich muss dann die Zuweisung immer in Klammern setzen.
Für solche Sachen nehm ich das manchmal her:
// Base* basePtr // Derived* derivedPtr if( basePtr && (derivedPtr = dynamic_cast<Derived*>(basePtr)) ) { mach_was_mit_ptr(derivedPtr); }