我记得读过一本关于标准C编程语言的书。它在某种情况下说C你可以写i = + 1,等于i + = 1。所以i(运算符)=(表达式)等于i =(运算符)(表达式)。我从来没有见过这种C,是否有人可以解释这个?
致以最诚挚的问候和感谢, 范
答案 0 :(得分:22)
这是C中+ =运算符的非常初始的语法。我认为它甚至在第一版K& R书之前就已被弃用。
编辑:可在此处找到带有C参考手册的PDF文件: http://www.math.utah.edu/computing/compilers/c/Ritchie-CReferenceManual.pdf 看看7.14.1
(唉,AnT发布的那个不再有效)
答案 1 :(得分:14)
这是事实。该版本的C称为CRM C(CRM代表“C参考手册” - 由Dennis Ritchie编写的文档)。在那个版本的C中有许多奇怪的东西。
下载文档答案 2 :(得分:8)
Kernighan和Ritchie的 C编程语言,第一版解释了这一点。我在this post on comp.lang.c
找到了引用。相关部分报价:
由于C是一种不断发展的语言,因此可能存在某些过时的结构 在旧程序中找到。虽然大多数版本的编译器都支持 如此不合时宜[ - 1978年 - ],最终它们将会消失, 只留下一个可移植性问题。
早期版本的C使用
为代表=op
而非op=
表单进行分配 运营商。这导致了歧义,以x=-1
实际递减
x
,因为=
和-
相邻,但 可能很容易将-1
分配给x
。
维基百科也有类似的描述。来自their entry for C,谈论K& R C和“Old C”差异:
=op
形式的复合赋值运算符(例如=-
)已更改为op=
形式,以消除由i=-10
等构造创建的语义歧义,已被解释为i =- 10
而不是可能的i = -10
。
答案 3 :(得分:1)
如果要为变量分配负数,肯定会出现问题。什么决定你的意思呢?间距? (ew!)或parenthetis(double ew!)。以下是一些显示问题的示例
i = -1; //Is this any different from the line below? Since when have spaces in these kind of cases mattered?
i =- 1; //If the suggested syntax existed, what would these two lines mean?
//The only thing left now (if we rule out making spaces matter) is to use parenthetis in my eyes, but...
i =(-1); //This is just ugly
正如评论中所指出的,用于取消引用指针的*符号与减号完全相同。
答案 4 :(得分:0)
这不是C.在标准C中,相当于i=1
。可能是你正在寻找i++
?
答案 5 :(得分:0)
一点点空白可能有助于为您澄清这一点。
当你写i=+1
时,实际发生的是i = +1
。这是因为C中没有= +运算符。=
被视为自己的运算符,而+
是作用于常量1
的一元运算符。因此,对该语句的评估从=
运算符的右侧开始。 +1
将评估为1
,然后=
运算符会将该值分配给变量i
。
+=
是C中自己的运算符,这意味着“将此运算符右侧的表达式的值添加到左侧的变量中,并将其赋值给该变量,所以类似于以下内容:
i = 3;
i += 2;
将评估为5
,因为+=
运算符将评估运算符的右侧(在本例中为2
),并将其添加到左侧(在本例中,我的值为3)并将其分配给左侧的变量。实质上,这变为i = (2 + 3)
。因此,变量i
的最终值为5
。
如果您只是将值1
添加到整数变量,则可以使用++
运算符。在变量(即i++
)之后添加此运算符将导致当前代码行在将变量递增1之前执行。将变量前面的运算符加前缀将导致在变量递增后执行语句。
e.g:
i = 5;
j = i++;
将导致i = 6
和`j = 5',而
i = 5;
j = ++i;
将产生i = 6
和j = 6
。
类似地,--
运算符可用于将变量减1(减少)一个,类似于++
将变量增加(增加)的方式。关于在变量之前或之后定位运算符的相同规则适用于两个运算符。
希望这可以解决一些问题。