Я не могу найти какую-либо конкретную причину, почему операторы не существуют (в C99).
Таким образом, единственная причина, которую я могу найти, состоит в том, что в C89 не было логического типа, и эти логические операторы предназначались для использования исключительно в if
.
Пример:
int i = 5;
/* This should not make any difference,
since or'ing with false, shouldn't change
the value... dib di dib diddy...*/
i ||= 0; /* Actually: i = i || 0, which gives 'true' */
i
теперь «1», что для большинства людей довольно противоречиво.
Этот оператор, очевидно, не принесет никакого улучшения ясности или кодирования без логического типа, который бы создавал смысл или был бы с другим.
По моему мнению, реализация a ||= b;
как if(!a) a = b;
была бы довольно простой и уже была реализована, например, например. Lua.
Так что ваш вопрос, кажется, немного, почему C был разработан так, как он был спроектирован.
Если бы этот вопрос был о C ++, вы могли бы, например, спросить Бьярна Страуструпа и спросить его, что на него нашло. Поскольку это не так, мне кажется, что это тупик, потому что стандарт был написан довольно давно, и вы больше не можете спрашивать людей, почему h ***.
С другой стороны, этот неполный набор операторов должен (на мой взгляд) быть полностью составленным с использованием записи, аналогичной вашей, поскольку, по моему мнению, нет никаких оснований для этого.
Я надеюсь, что смогу немного помочь.