C 为什么复合赋值中不允许使用一元运算符?

C 为什么复合赋值中不允许使用一元运算符?,c,C,我知道一个=b或a~=b等复合赋值在C中是不允许的,尽管a=!b或a=~b是允许的。只是好奇为什么语言设计成这样?有什么具体的技术原因吗?在最新的编译器中是否提供了此类支持?C语言的这种局限性(至少我觉得它是一种局限性)使初学者的语言变得复杂。这使我们能够记住C中的一些特性。定义=和~=可能会导致不必要的混淆,因为某些标记可以是一元运算符或二元运算符,由上下文确定。例如:a-=b意味着什么,a=a-b或a=-b 无论如何,你不需要它们a=!b和a=~b不会导致更多的输入,而且很容易理解。a!=b

我知道一个=b或a~=b等复合赋值在C中是不允许的,尽管a=!b或a=~b是允许的。只是好奇为什么语言设计成这样?有什么具体的技术原因吗?在最新的编译器中是否提供了此类支持?C语言的这种局限性(至少我觉得它是一种局限性)使初学者的语言变得复杂。这使我们能够记住C中的一些特性。

定义
=
~=
可能会导致不必要的混淆,因为某些标记可以是一元运算符或二元运算符,由上下文确定。例如:
a-=b
意味着什么,
a=a-b
a=-b


无论如何,你不需要它们<代码>a=!b和
a=~b
不会导致更多的输入,而且很容易理解。

a!=b
已经有了一个含义,而且它不是一个赋值。一般来说,
a@=b
(对于二进制运算符
@
)是
a@b
的简写,除了
a
只计算一次。这对一元运算符没有任何意义。你会用什么
a~=
实现
a=~a
a=-b
不是
a-=b
。你不是在争论它们应该做同样的事情吗?许多一元运算符要么兼作二元运算符(
~
-
),要么后跟一个
=
!=
)就已经有了意义。即使不是这样,语法也会很奇怪。例如,您将拥有
xop=后面没有任何内容。最接近这一点的C是增量前后运算符
++
-
,它们根本不使用
=
。@Tomkarze:
++
-
*
&
都是一元运算符和二元运算符,但
~