6

GCC には、次のようなステートメントを作成できるC への素晴らしい 3 項式拡張機能があります。

int x = some_var ?: 10; // expands to some_var ? some_var : 10

これは非常に優れており、特に直感的ではありませんが、機能します。C 言語のほとんどの二項演算子には、代入を可能にする追加の演算子が関連付けられています。

x = x + 2;

// instead, we can say
x += 2;

これが事実であり、ほとんどの 2 項 C 演算子 ( +-*/%、)の標準であるため|、なぜ 3 項拡張演算子の場合に当てはまらないのですか?&^

int x = ...;
x ?:= 2; // error: Expected expression before '=' token

// which would expand to
x = x ?: 2;

標準 C でこれをサポートしていない唯一の演算子は論理演算子 ( ||, &&) であり、間違いなく 3 項は該当しないのに、なぜこれを行うことができないのでしょうか?

コードでクールな髪型でスマイリーフェイスを作りたいのですが、できません! これはオペレーターの設計上の見落としですか、それとも意図的でどこかに文書化されていますか? 演算子がオペランドを短絡した結果なのか、それともまったく別の何かなのか?

4

1 に答える 1