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