Ternary operators and Return in C
Why can't we u开发者_JS百科se return keyword inside ternary operators in C, like this:
sum > 0 ? return 1 : return 0;
return
is a statement. Statements cannot be used inside expressions in that manner.
Because a ternary operation is an expression and you can't use statements in expresssions.
You can easily use a ternary operator in a return though.
return sum > 0 ? 1 : 0;
Or as DrDipShit pointed out:
return sum > 0;
The ternary operator deals in expressions, but return
is a statement.
The syntax of the return
statement is
return
expr ;
The syntax of the ternary conditional operator is
expr1 ?
expr2 :
expr3
So you can plug in an invocation of the ternary operator as the expr in a return
statement. But you cannot plug in a return
statement as expr2 or expr3 of a ternary operator.
The ternary expression acts a lot like an if
statement, but it is not an exact replacement for an if
statement. If you want to write
if(sum > 0)
return 1;
else return 0;
you can write it as a true if
statement, but you can't convert it to using ? :
without rearranging it a little, as we've seen here.
Because return
is a statement, not an expression. You can't do int a = return 1;
either.
See the syntax of a ternary operator is
expr1 ? expr2: expr3;
where expr1
, expr2
, expr3
are expressions;
The operator ?:
works as follows
expr1
is evaluated first if it is true expr2
is evaluated otherwise expr3
is evaluated.
hence in expressions the return statement can not be used in C-language.
The return
statement is used for returning from a function
, you can't use inside ternary operator.
(1==1)? return 1 : return 0; /* can't use return inside ternary operator */
you can make it like
return (1==1) ? 1 : 0;
The syntax of a ternary operator follows as
expr1 ? expr2 : expr3;
where expr1
, expr2
, expr3
are expressions and return
is a statement, not an expression.
You can use gcc's/clang's statement expressions feature.
#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);
}
Results are:
$ ./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;
Just by looking at the syntax you should know that an statement cannot be used in an expression.
What you want can be achived by doing:return sum > 0 ? 1 : 0;
精彩评论