2017-12-14 5 views
0

Ich sah etwas in jemand Code, den ich nicht verstehe. Was sagt es in der Return-Anweisung?Pfeil nach rechts gleich Pfeil nach rechts

static cell_ptr UD_self(cell_ptr c) { return c->U = c->D = c; } 

hier definiert:

struct cell_s; 
typedef struct cell_s *cell_ptr; 
struct cell_s { 
    cell_ptr U, D, L, R; 
    int n; 
    union { 
     cell_ptr c; 
     int s; 
    }; 
}; 
+2

In welcher Sprache ist das? – Yashas

+2

Das ist hässlicher Code, auch wenn er syntaktisch gültig ist. Es führt zwei Zuweisungen durch und gibt den zugewiesenen Wert zurück (in diesem Fall "c"). Moderne Compiler sind sehr gut und würden perfekt optimieren c-> D = c; c-> U = c; zurück c; ' – Ronald

Antwort

1

Es ist nur eine Abkürzung Weg, dies zu schreiben:

{ 
    c->D = c; 
    c->U = c->D; 
    return c->U; 
} 

Die Aussage return c->U = c->D = c; funktioniert, weil der Zuweisungsoperator = den Wert zurückgibt hat es nur zugewiesen . Dieser Wert wird dann in der nächsten Zuweisung verwendet. Es verbindet von rechts nach links, so bedeutet es return (c->U = (c->D = c));

Verwandte Themen