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 behandlung

    Wenn 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);
    }
    

Anmelden zum Antworten