C は命令型言語であり、数学ではなくモデリング マシンであり、すべての関数に値があるからです。
if 式には、必須の else 式 (または必須の例外スロー) が必要です。これは、使用した分だけ支払うパフォーマンス指向およびマシン指向のプログラミング言語にはうまく適合しません。
(補足) 標準では、if 式が代入の右側にない場合、else 部分はオプションになると規定できます。ただし、これは C の文法をより複雑にします。
2 番目の制限: 式内では、他の式のみを使用できます。たとえば、次のことはできません。
int i = if (foo) { for (int x=4; x; --x) {}; 42 } else bar;
原則的には可能ですが、それは C の美しいミニマルな文法の一部を奪うことになると思います。単純な式とコード ブロックのルールを拡張する必要があり、解析中により多くのコンテキストを記憶する必要があるなどです。(/サイドノート)
C++ の三項演算子 (注: C++ ) はまさにそれを行います: 式であるため、else-part を要求するか、例外をスローします:
int foo = frob ? bar : throw "crap";
それは基本的に if-else-式です。Python は、次の言語に置き換えられた言語の例?:
ですif/else
。
foo = frob if bar else 42
あなたが説明しているのは、実際には 2 つのことです。If ステートメントと if 式です。どちらも C です。どちらも明確な特徴があります。そして、どういうわけか、if ステートメント と if 式の両方が式ではない理由を尋ねます。