为什么我们不能在C中的三元运算符中使用return关键字,如下所示: 总和> 0?返回1:返回0;
答案 0 :(得分:30)
return
是一个声明。语句不能以这种方式在表达式中使用。
答案 1 :(得分:28)
因为三元操作是表达式而您不能在表达中使用语句。
您可以在返程中轻松使用三元运算符。
return sum > 0 ? 1 : 0;
或者DrDipShit指出:
return sum > 0;
答案 2 :(得分:12)
三元运算符处理表达式,但是return
是语句。
return
语句的语法为
return
expr ;
三元条件运算符的语法为
expr1 ?
expr2 :
expr3
因此,您可以在return
语句中将三元运算符的调用作为 expr 插入。但是您不能以三元运算符的 expr2 或 expr3 插入return
语句。
三元表达式的行为很像if
语句,但它不能完全替代if
语句。如果你想写
if(sum > 0)
return 1;
else return 0;
您可以将其写为真实的if
语句,但是如前所述,您必须将其转换为使用? :
才能重新使用它。
答案 3 :(得分:9)
因为return
是一个语句,而不是表达式。你也不能int a = return 1;
。
答案 4 :(得分:2)
请参阅三元运算符的语法
expr1 ? expr2: expr3;
其中expr1
,expr2
,expr3
是表达式;
运营商?:
的工作原理如下
如果expr1
为真,则首先评估expr2
,否则评估expr3
。
因此,在表达式中, return 语句不能用于C语言。
答案 5 :(得分:2)
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
是语句,而不是表达式。
答案 6 :(得分:0)
通过查看语法,您应该知道语句不能在表达式中使用。
您可以通过以下方式实现您的目标:return sum > 0 ? 1 : 0;
答案 7 :(得分:0)
您可以使用 gcc/clang 的语句表达式功能。
#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;