C 中的三元运算符和 Return

发布于 2024-09-16 13:12:59 字数 104 浏览 7 评论 0原文

为什么我们不能在 C 中的三元运算符中使用 return 关键字,如下所示:

sum > 0 ? return 1 : return 0;

Why can't we use return keyword inside ternary operators in C, like this:

sum > 0 ? return 1 : return 0;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

毅然前行 2024-09-23 13:12:59

return 是一个语句。不能以这种方式在表达式内部使用语句。

return is a statement. Statements cannot be used inside expressions in that manner.

李不 2024-09-23 13:12:59

因为三元运算是一个表达式,并且不能在表达式中使用语句。

不过,您可以轻松地在返回中使用三元运算符。

return sum > 0 ? 1 : 0;

或者正如 DrDipShit 指出的那样:

return sum > 0;

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;
时间你老了 2024-09-23 13:12:59

三元运算符处理表达式,但return 是一个语句。

return 语句的语法为

return expr ;

三元条件运算符的语法为

expr1 ? expr2 : expr3

因此,您可以插入三元运算符的调用作为 < return 语句中的 em>expr。但是您不能将 return 语句插入为三元运算符的 expr2expr3

三元表达式的行为很像 if 语句,但它并不是 if 语句的精确替代。如果要写

if(sum > 0)
     return 1;
else return 0;

可以写成真正的if语句,但是不能转换为using? : 无需稍微重新排列它,正如我们在这里所看到的。

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.

你的他你的她 2024-09-23 13:12:59

因为 return 是一个语句,而不是一个表达式。您也不能执行 int a = return 1;

Because return is a statement, not an expression. You can't do int a = return 1; either.

空心空情空意 2024-09-23 13:12:59

请参阅三元运算符的语法,

expr1 ? expr2: expr3;

其中 expr1expr2expr3 是表达式;

运算符 ?: 的工作原理如下
如果为 true,则首先评估 expr1,然后评估 expr2,否则评估 expr3

因此,在表达式中,return 语句不能在 C 语言中使用。

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.

滥情哥ㄟ 2024-09-23 13:12:59

return 语句用于从函数返回,不能在三元运算符内部使用。

 (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 是一个声明,而不是一个表达式。

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.

送舟行 2024-09-23 13:12:59

您可以使用 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;

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;
超可爱的懒熊 2024-09-23 13:12:59

只要看一下语法就应该知道语句不能在表达式中使用。
您想要的可以通过执行以下操作来实现:return sum > 0 ? 1: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;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文