web-dev-qa-db-ja.com

三項演算子とCでの戻り値

次のように、Cの三項演算子内でreturnキーワードを使用できないのはなぜですか:sum> 0? 1を返す:0を返す;

20

returnはステートメントです。ステートメントは、そのように式内で使用することはできません。

三項演算は式であり、式でステートメントを使用できないためです。

ただし、リターンでは三項演算子を簡単に使用できます。

return sum > 0 ? 1 : 0;

またはDrDipShitが指摘したように:

return sum > 0;
29
Wolph

三項演算子は式を扱いますが、returnはステートメントです。

returnステートメントの構文は次のとおりです。

returnexpr;

三項条件演算子の構文は次のとおりです。

expr1?expr2:expr

したがって、三項演算子の呼び出しをreturnステートメントのexprとしてプラグインできます。ただし、returnステートメントを三項演算子のexpr2またはexprとしてプラグインすることはできません。

三項式はifステートメントのように機能しますが、ifステートメントの正確な置き換えではありません。書きたいなら

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

真のifステートメントとして記述できますが、ここで見たように、少し再配置せずに? :を使用するように変換することはできません。

13
Steve Summit

returnはステートメントであり、式ではないためです。できませんint a = return 1;どちらか。

9
user180326

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はステートメントであり、式ではありません。

2
Achal

三項演算子の構文を参照してください。

expr1 ? expr2: expr3;

どこ expr1expr2expr3は式です。

オペレーター ?:は次のように機能しますexpr1が真の場合、最初に評価されますexpr2それ以外の場合は評価されますexpr3が評価されます。

したがって、式ではreturnステートメントをC言語で使用することはできません。

2
ksrao

構文を見るだけで、ステートメントを式で使用できないことがわかります。あなたが望むことは、次のことによって達成することができます:return sum > 0 ? 1 : 0;

0