Ваш профессор помнит древние версии C, в которых =+
, =-
, =*
и т. Д. Фактически означали то же самое, что и +=
, -=
, *=
и т. д. (Мы говорим здесь старше, чем версия, обычно называемая здесь «K & R». Версия 6 UNIX, если память служит.)
В текущих версиях C они не означают одно и то же; Версии со знаком равенства сначала будут проанализированы так, как если бы между пробелами и тем, что будет после, был пробел. Это приводит к созданию действительной программы (хотя и не той, которая выполняет то, что вы ожидаете) для =-
и =+
, поскольку -
и +
могут использоваться в качестве унарных операторов.
=*
или =/
могут быть использованы для урегулирования аргумента. a *= 3
умножит a
на три, а a /= 3
разделит его на три, но a =* 3
- это семантическая ошибка (поскольку унарный *
может применяться только к указателям), а a =/ 3
- синтаксическая ошибка (потому что /
может не использоваться как унарный оператор).