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;
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;
return
ist eine Aussage. Anweisungen können auf diese Weise nicht innerhalb von Ausdrücken verwendet werden.
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
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.
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 function
Sie 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.
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;
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. Undreturn 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