macht das sinn ? if ((sum = max)) {..}



  • Hi,

    ich hab aus einem Teil des php_sourcecodes (string.c->similar_text()) diesen code und komm aber nicht auf den Sinn, ne Zuweisung ist doch immer wahr ?!, also warum ne If-Abfrage ??

    int sum,max;
    ...
    if ((sum = max)) {
    ...
    }

    vielen vielen Dank für jede Antwort
    bye
    Christian



  • Es muss wohl

    if (sum==max) {  //wenn max gleich sum ist
    
    }
    

    heißen



  • "sum=max" liefert den übergebenen Wert zurück, damit du Zuweisungsketten (ala "a=b=c=...") aufbauen kannst - den kannst du ganz normal auf true/false testen.

    Also entspricht der Code letztendlich:

    sum=max
    if(sum)//oder: if(sum!=0)
    {
      //...
    }
    

    Wieviel Sinn das macht, mußt du selber entscheiden.

    Edit: Aber ein Tipfehler ist wohl wahrscheinlicher 😃


  • Mod

    roughneck99 schrieb:

    Hi,

    ich hab aus einem Teil des php_sourcecodes (string.c->similar_text()) diesen code und komm aber nicht auf den Sinn, ne Zuweisung ist doch immer wahr ?!, also warum ne If-Abfrage ??

    int sum,max;
    ...
    if ((sum = max)) {
    ...
    }

    vielen vielen Dank für jede Antwort
    bye
    Christian

    die doppelten klammern deuten an, dass hier tatsächlich zuweisung gemeint ist (doppelte klammern verhindern bei gcc eine warnung, bei vc++ muss noch ein explizter test dazu) - dea ergebnis des ausdrucks:
    a = b
    ist a nach der zuweisung (auch wenn die veränderung der variable a selbst ein nebeneffekt ist) - obiger code ist folglich equivalent zu:

    sum = max;
    if ( sum ) { // ...
    

    dabei wird sum implizit in bool konvertiert, also:

    sum = max;
    if ( sum != 0 ) { // ...
    


  • roughneck99 schrieb:

    ne Zuweisung ist doch immer wahr ?!

    Wurde zwar eigentlich schon beantwortet, aber ich sags nochmal explizit: Nein, eine Zuweisung ist nicht immer wahr. Sie hat den zugewiesenen Wert als Ergebnis, und der kann (nicht immer, das hängt vom Typ ab) in bool gewandelt werden. Für eingebaute Datentypen gilt: Numerische Nullen und Nullpointer werden in false umgewandelt, alles andere in true.



  • merci!. vielen Dank für die Antworten !


Anmelden zum Antworten