Ternäre Operatoren und Return in C

Lesezeit: 3 Minuten

Benutzer-Avatar
nullzeigerausnahme

Warum können wir das Schlüsselwort return nicht innerhalb von ternären Operatoren in C verwenden, wie hier:

sum > 0 ? return 1 : return 0;

  • Was ist falsch mit return sum > 0 ? 1 : 0;?

    – Paul Tomblin

    25. August 2010 um 13:42 Uhr

  • Oder was das betrifft, if (sum > 0) return 1 ; else return 0 ;

    – Pascal Cuoq

    25. August 2010 um 13:46 Uhr

  • Oder was das betrifft return sum > 0; ?

    – CB Bailey

    25. August 2010 um 13:47 Uhr

  • Da a ? b : c ist ein Ausdruck, der Ausdrücke enthält, keine Anweisungen. Und return d ist eine Aussage, kein Ausdruck.

    – Cmaster – Wiedereinsetzung von Monica

    27. Juni 2018 um 13:07 Uhr

  • Weil es ein Operator ist, kein if Aussage.

    – Ludin

    27. Juni 2018 um 13:07 Uhr

return ist eine Aussage. Anweisungen können auf diese Weise nicht innerhalb von Ausdrücken verwendet werden.

Benutzer-Avatar
Wolph

Weil eine ternäre Operation ein Ausdruck ist und Sie keine Anweisungen in Ausdrücken verwenden können.

Sie können jedoch problemlos einen ternären Operator in einer Rückgabe verwenden.

return sum > 0 ? 1 : 0;

Oder wie DrDipShit betonte:

return sum > 0;

  • von gerade: Rückgabesumme > 0; was sowieso als Rückgabe von 1 oder 0 funktioniert.

    – Ultimative Verschlingung

    25. August 2010 um 13:47 Uhr

  • @DrDipShit: sehr wahr, in diesem Fall funktioniert das genauso gut 🙂

    – Wolph

    25. August 2010 um 15:03 Uhr

Benutzer-Avatar
Steve Gipfel

Der ternäre Operator befasst sich mit Ausdrücken, aber return ist eine Aussage.

Die Syntax der return Aussage ist

return Ausdruck ;

Die Syntax des ternären Bedingungsoperators lautet

Ausdruck1 ? Ausdruck2 : expr3

Sie können also einen Aufruf des ternären Operators als Plug-In verwenden Ausdruck in einem return Aussage. Aber man kann keine einstecken return Aussage als Ausdruck2 oder expr3 eines ternären Operators.

Der ternäre Ausdruck verhält sich ähnlich wie ein if Anweisung, aber es ist kein exakter Ersatz für eine if Aussage. Wenn du schreiben willst

if(sum > 0)
     return 1;
else return 0;

Sie können es als wahr schreiben if -Anweisung, aber Sie können sie nicht in using umwandeln ? : ohne es ein wenig neu anzuordnen, wie wir hier gesehen haben.

Da return ist eine Aussage, kein Ausdruck. Du kannst nicht int a = return 1; entweder.

Benutzer-Avatar
krao

Siehe die Syntax eines ternären Operators ist

expr1 ? expr2: expr3;

wo expr1, expr2, expr3 sind Ausdrücke;

Der Betreiber ?: funktioniert wie folgt
expr1 wird zuerst ausgewertet, wenn es wahr ist expr2 wird anders bewertet expr3 ausgewertet wird.

daher in Ausdrücken die Rückkehr -Anweisung kann nicht in C-Sprache verwendet werden.

Das return -Anweisung wird für die Rückkehr von a verwendet functionSie können den ternären Operator nicht verwenden.

 (1==1)? return 1 : return 0; /* can't use return inside ternary operator */

du kannst es gerne machen

return (1==1) ? 1 : 0;

Die Syntax eines ternären Operators lautet wie folgt

expr1 ? expr2 : expr3;

wo expr1, expr2, expr3 sind Ausdrücke und return ist eine Aussage, kein Ausdruck.

Benutzer-Avatar
Twaik Yont

Sie können die Funktion für Anweisungsausdrücke von gcc/clang verwenden.

#include <stdio.h>

#define discard(value) ({return value; value;})

int foo(int a) {
        int b = a%2 ?: discard(0);
        return b*a;
}

int main(int argc, char argv) {
        printf("foo(%d) = %d;\n", argc, foo(argc));
        return foo(argc);
}

Ergebnisse sind:

$ ./bar 
foo(1) = 1;
$ ./bar 2
foo(2) = 0;
$ ./bar 2 3
foo(3) = 3;
$ ./bar 2 3 4
foo(4) = 0;
$ ./bar 2 3 4 5
foo(5) = 5;
$ ./bar 2 3 4 5 6
foo(6) = 0;
$ ./bar 2 3 4 5 6 7
foo(7) = 7;
$ ./bar 2 3 4 5 6 7 8
foo(8) = 0;
$ ./bar 2 3 4 5 6 7 8 9
foo(9) = 9;
$ ./bar 2 3 4 5 6 7 8 9 10
foo(10) = 0;

1366500cookie-checkTernäre Operatoren und Return in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy