是否有一个C的子集可以像这样写:i = + 1?

C.C*_*.C. 9 c

我记得读过一本关于标准C编程语言的书.它在某种情况下说C你可以写i = + 1,等于i + = 1.所以i(运算符)=(表达式)等于i =(运算符)(表达式).我从来没有见过这种C,是否有人可以解释这个?

最好的问候和谢谢,范

Rem*_*o.D 22

这是C中+ =运算符的非常初始的语法.我认为它甚至在第一版K&R书籍之前就被弃用了.

编辑:带有C参考手册的PDF可以在这里找到:http: //www.math.utah.edu/computing/compilers/c/Ritchie-CReferenceManual.pdf 查看7.14.1

(唉,AnT发布的那个不再有效)

  • C编程语言,第二版.附录C,p.260,"像= +这样的旧任务运营商真的不见了." (7认同)
  • 你会为此提供参考吗? (3认同)

AnT*_*AnT 14

这是真的.该版本的C称为CRM C(CRM代表"C参考手册" - 由Dennis Ritchie编写的文档).在那个版本的C中有许多奇怪的东西.

你可以在这里下载这份文件http://cm.bell-labs.com/cm/cs/who/dmr/cman.pdf


Alo*_*hal 8

Kernighan和Ritchie的The C Programming Language,第一版解释了这一点.我在这篇文章中comp.lang.c找到了一个引用.相关部分报价:

由于C是一种不断发展的语言,因此在较旧的程序中可能会发现某些过时的结构.尽管大多数版本的编译器都支持这样的时间错误[ - 1978年 - ],但它们最终会消失,只留下可移植性问题.

早期版本的C使用表单=op而不是op=赋值运算符.这导致了模糊,以典型为代表

x=-1
Run Code Online (Sandbox Code Playgroud)

实际上,x由于=-相邻而减少,但可能很容易分配-1给它x.

维基百科也有类似的描述.从他们的C入门,谈论K&R C和"老C"的差异:

表单=op(例如=-)的复合赋值运算符被更改为表单,op=以消除由此类结构创建的语义歧义,这些结构i=-10被解释为i =- 10而不是可能的意图i = -10.