为什么不能在 C 语言的三目运算符中使用 return 关键字,就像这样:
sum > 0 ? return 1 : return 0;
为什么不能在 C 语言的三目运算符中使用 return 关键字,就像这样:
sum > 0 ? return 1 : return 0;
return
是一个语句,不能以那种方式在表达式内使用。
三元运算符是一个表达式,而在表达式中不能使用语句。
不过你可以在返回语句中轻松使用三元运算符。
return sum > 0 ? 1 : 0;
或者像DrDipShit指出的那样:
return sum > 0;
三元运算符处理表达式,但return
是一个语句。
return
语句的语法为
return
expr ;
三元条件运算符的语法为
expr1 ?
expr2 :
expr3
因此,您可以将三元运算符的调用插入作为return
语句中的expr。但是,您不能将return
语句作为三元运算符的expr2或expr3插入其中。
三元表达式的行为很像if
语句,但它并不是if
语句的完全替代。如果您想要编写
if(sum > 0)
return 1;
else return 0;
您可以将其编写为真正的if
语句,但是如果要使用? :
,则需要稍微重新排列一下,就像我们在这里看到的那样。
因为return
是一个语句,而不是表达式。你也不能这样写:int a = return 1;
return
语句用于从function
中返回,不能在三元运算符中使用。
(1==1)? return 1 : return 0; /* can't use return inside ternary operator */
return (1==1) ? 1 : 0;
expr1 ? expr2 : expr3;
其中expr1
、expr2
和expr3
是表达式,return
是语句而不是表达式。
三元运算符的语法为:
expr1 ? expr2: expr3;
其中expr1
,expr2
,expr3
是表达式;
?:
运算符的工作方式如下:如果expr1
为真,则首先评估expr1
,否则评估expr3
。
因此,在C语言中,表达式中不能使用return语句。
#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);
}
$ ./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;
仅从语法上看,您应该知道语句不能用于表达式中。
您想要的可以通过以下方式实现:return sum > 0 ? 1 : 0;
return sum > 0 ? 1 : 0;
有什么问题? - Paul Tomblinreturn sum > 0;
呢? - CB Baileya ? b : c
是一个包含表达式而非语句的表达式,而return d
是一条语句而非表达式。 - cmaster - reinstate monica