2016-04-09 1 views
0

Was bedeuten Äquivalenzoperatoren (==) innerhalb von Funktionsparametern in der Sprache c wie die folgende Anweisung?Äquivalenzoperatoren (==) innerhalb von Funktionsparametern

binder_transaction (proc, thread, & tr, cmd == BC_REPLY);

+0

ich über „==“ in Funktionsargumente nicht im Rückgabewert wissen wollen! – Cert

+0

* Operatoren * in C-Sprache werden in * -Ausdrücken * verwendet. Das ist alles. Es gibt absolut keinen Unterschied zwischen einem Ausdruck, der als Funktionsargument verwendet wird, oder einem Ausdruck, der irgendwo anders verwendet wird (z. B. als Rückgabewert). Unabhängig vom Kontext ist es nur ein Ausdruck. Ihr Versuch, zwischen "Funktionsargumenten" und "Rückgabewert" zu unterscheiden, ist völlig unbegründet. Es gibt keinen Unterschied. – AnT

+0

@Cert: Die Antwort ist durch die Tatsache gegeben, dass es ein Duplikat ist: Es gibt keinen Unterschied in dem, wo Sie den Operator "==" anwenden, also ist der Punkt, den es als Argument übergeben hat, irrelevant. Alles, was Sie wissen müssen, ist, was '==' zurückgibt. – MicroVirus

Antwort

4

cmd == BC_REPLY als Argument der Funktion binder_transaction ist im Grunde ein int Wert an die Funktion übergeben. Dies entspricht

int b = (cmd == BC_REPL);    // Will return either 0 or 1 
binder_transaction(proc, thread, &tr, b); 
+0

if (cmd == BC_REPLY) binder_transaction (proc, thread, & tr, True); if (cmd! = BC_REPLY) binder_transaction (proc, thread, & tr, False); ?? – Cert

+1

Ja, diese Doppelprüfung ist äquivalent, aber viel ausführlicher. –

+1

Vergleichsoperatoren in C-Sprache erzeugen keine Bool-Werte. Das Ergebnis von '==' in C ist immer ein 'int'. – AnT