Тернарные операторы и возврат в C - PullRequest
18 голосов
/ 25 августа 2010

Почему мы не можем использовать ключевое слово return внутри тернарных операторов в C, например так: сумма> 0? возврат 1: возврат 0;

Ответы [ 7 ]

31 голосов
/ 25 августа 2010

return это утверждение. Заявления не могут использоваться внутри выражений таким образом.

29 голосов
/ 25 августа 2010

Поскольку троичная операция является выражением, и вы не можете использовать выражения в выражениях.

Вы можете легко использовать троичный оператор в возврате.

return sum > 0 ? 1 : 0;

Или, как указал DrDipShit:

return sum > 0;
12 голосов
/ 27 июня 2018

Тернарный оператор работает с выражениями, но return является оператором.

Синтаксис оператора return:

return expr ;

Синтаксис троичного условного оператора:

expr1 ? expr2 : expr3

Таким образом, вы можете подключить вызов троичного оператора как expr в операторе return.Но вы не можете подключить оператор return как expr2 или expr3 троичного оператора.

Тернарное выражение действует во многом как оператор if,но это не точная замена для оператора if.Если вы хотите написать

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

, вы можете написать его как истинное выражение if, но вы не можете преобразовать его в использование ? :, не переставив его немного, как мы видели здесь.

9 голосов
/ 25 августа 2010

Потому что return это утверждение, а не выражение. Вы также не можете сделать int a = return 1;.

2 голосов
/ 27 июня 2018

Оператор 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 - оператор, а не выражение.

2 голосов
/ 25 августа 2010

См синтаксис троичного оператора:

expr1 ? expr2: expr3;

, где expr1, expr2, expr3 - выражения;

Оператор ?: работает следующим образом expr1 оценивается первым, если оно истинно expr2 оценивается в противном случае expr3 оценивается.

следовательно, в выражениях оператор return не может использоваться на языке Си.

0 голосов
/ 18 сентября 2015

Просто взглянув на синтаксис, вы должны знать, что оператор не может быть использован в выражении. То, что вы хотите, может быть достигнуто путем: return sum > 0 ? 1 : 0;

...