三元运算符和C语言的返回

时间:2010-08-25 13:41:28

标签: c conditional-operator

为什么我们不能在C中的三元运算符中使用return关键字,如下所示: 总和> 0?返回1:返回0;

8 个答案:

答案 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;

其中expr1expr2expr3是表达式;

运营商?:的工作原理如下 如果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;

其中expr1expr2expr3是表达式,而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;