2016-04-09 2 views
0

Я знаю, что присвоения a! = B или a ~ = b и т. Д. Не допускаются в C, хотя допускается a =! B или a = ~ b. Просто любопытно, почему язык был спроектирован так? Любая конкретная техническая причина? В последних компиляторах такая поддержка предоставляется? Такие ограничения C (по крайней мере, я считаю, что это ограничение) делает язык сложным для новичков. Это делает нас наизусть некоторыми из таких особенностей в C.Почему унарные операторы не допускаются в сложных назначениях?

+8

'a! = B' уже имеет значение - и это не задание. В общем случае 'a @ = b' (для _binary_ operator' @ ') является сокращением для' a = a @ b', за исключением того, что 'a' оценивается только один раз. Это не имеет никакого смысла для унарных операторов. Что бы вы использовали? 'a ~ =' для достижения 'a = ~ a'? –

+2

'a = -b' - это нечто иное, чем' a - = b'. Разве вы не утверждаете, что должны делать то же самое? – usr2564301

+1

Многие унарные операторы либо двойные, как бинарные операторы ('~', '-'), либо уже имеют значение, за которым следует' = '('! = '). Даже если бы это было не так, синтаксис был бы довольно странным. Например, у вас будет 'x op =;' без ничего после него. Ближайшим C это операторы pre и post-increment '++' и '--', которые вообще не используют' = '. –

ответ

0

Определение != и ~= может вызвать ненужную путаницу, поскольку некоторые токены могут быть либо унарным оператором, либо двоичным оператором, определяемым контекстом. Например: Что означает a -= b, a = a - b или a = -b?

В любом случае, они вам не нужны. a = !b и a = ~b не вызывают больше ввода, и их довольно легко понять.

Смежные вопросы