C中=是什么意思?
我在一些C代码中遇到了=+
而不是今天的标准+=
; 我不太确定这里发生了什么事。 我也无法在文档中find它。
在C的古代版本中, =+
相当于+=
。 在最早的恐龙骨头旁边发现了它的遗迹。 还有,它没有什么特别的含义 – 它只是一个=
后面的。
您可以在http://cm.bell-labs.com/7thEdMan/在线获得1979年1月的第七版UNIX手册(卷2a)中的旧符号证据。;
本章标题为Dennis M. Ritchie的“ C参考手册 ”,并且在手册的PDF版本中,但不在HTML版本中。 在相关部分,它说:
7.14.1 lvalue =expression式
expression式的值将replace左值引用的对象的值。 操作数不必具有相同的types,但都必须是int,char,float,double或pointer。 如果两个操作数都不是指针,则按照预期进行赋值,可能在右边的expression式转换之前进行赋值。 当两个操作数都是int或任何types的指针时,都不会发生转换; expression式的值简单地存储在由左值引用的对象中。 因此可能会产生指针,这些指针在使用时会导致寻址exception。
7.14.2 lvalue = +expression式
7.14.3 lvalue = – expression式
7.14.4 lvalue = *expression式
7.14.5左值= /expression式
7.14.6 lvalue =%expression式
7.14.7 lvalue = >>expression式
7.14.8 lvalue = <<expression式
7.14.9 lvalue =&expression式
7.14.10 lvalue = ^expression式
7.14.11 lvalue = | expression可以通过将其等同于“E1 = E1 op E2”来推断“E1 = op E2”forms的expression式的行为; 然而,E1只被评估一次。 而且,像''i = + p''这样的expression式被添加到一个整数,被禁止。
另外,L Rosler在“UNIX®SYSTEM:Readings and Applications,Volume II”最初由AT&T公司于1984年10月出版的技术杂志(Prentice-Hall,1987)中发表了一篇论文“ C的进化 ” ISBN 0-13-939845-7)。 其中一部分是:
III。 pipe理不兼容的更改
不可避免地,所做的一些改变改变了现有有效程序的语义。 那些维护内部使用的各种编译器的人试图确保程序员有足够的警告,说这样的改变将会生效,并且引入一个新的编译器版本并不会立即强制重新编译所有的程序。
例如,在最早的实现中,模糊expression式
x=-1
被解释为“x减1”。 现在解释为“赋值-1到x”。 这个变化发生在三个年度主要版本的过程中。 首先,更改编译器和lint
程序validation程序,以生成一条警告信息,警告存在“老式”分配操作,例如=-
。 接下来,将parsing器更改为新的语义,编译器警告不明确的赋值操作。 最后,警告信息被消除了。支持使用“老式初始化”
int x 1;
(没有等号)被类似的策略抛弃了。 这有助于parsing器产生更多的智能语法错误诊断。
可以预见的是,一些C用户忽略了这些警告,直到引入不兼容的编译器,迫使他们select更改过时的源代码或者假定维护自己版本的编译器。 但整体而言,阶段性变革的策略是成功的。
这只是分配,然后是一元加。
#include <stdio.h> int main() { int a; a =+ 5; printf("%d\n",a); return 0; }
打印“5”。 将a =+ 5
更改为a =- 5
,并打印“-5”。 读取a =+ 5
的更简单的方法可能是a = +5
。
这是一个古老的“+ =”不存在的变体。 在现代编译器中,这相当于一个赋值运算符,后跟一个一元“+”。
我认为
a =+ 5;
应该相当于
a = (+5);
因此是非常不好的风格的代码。
我试了下面的代码,它打印“5”:
#include <iostream> using namespace std; int main() { int a=2; a =+ 5; cout << a; }
看完你的问题后,我只是调查了这些。 让我告诉你我发现了什么。 尝试了海湾合作委员会和turboc。 没有确定在Visual Studio,因为我没有安装在我的PC上
int main() { int a=6; a =+ 2; printf("%d",a); } o/p , a value is 2 int main() { int a=6; a =- 2; printf("%d",a); } o/p , a value is -2
我不知道其他答案,因为他们说它是一个古老的C版本。但是现代编译器把它们看作是一个值得分配的东西(正面的或负面的),下面的代码使我更加确信它。
int main() { int a=6; a =* 2; \\ Reporting an error inavlid type of argument of unary * printf("%d",a); } if *= is equal to =* then it should not report error but its throwing an error