Jer*_*fin 75
在古代版本的C中,=+相当于+=.在最早的恐龙骨头旁边发现了遗留物.更重要的是,它没有特别的意义 - 它只是一个=后跟一个+.
Jon*_*ler 34
您可以在1979年1月的第7版UNIX手册(第2a卷)中找到旧符号的证据,可在http://cm.bell-labs.com/7thEdMan/在线获取.
本章的标题为Dennis M. Ritchie的" C参考手册 ",并且在手册的PDF版本中,但不在HTML版本中.在相关部分,它说:
7.14.1 lvalue =表达式
表达式的值替换了左值引用的对象的值.操作数不必具有相同的类型,但两者必须是int,char,float,double或pointer.如果两个操作数都不是指针,则赋值按预期进行,可能在右侧表达式转换之前.当两个操作数都是int或任何类型的指针时,都不会发生转换; 表达式的值只是存储在左值引用的对象中.因此,可以生成指针,这些指针在使用时将导致寻址异常.
7.14.2 lvalue = + expression
7.14.3 lvalue = - expression
7.14.4 lvalue =*expression
7.14.5 lvalue =/expression
7.14.6 lvalue =%expression
7.14.7 lvalue = >> expression
7.14.8 lvalue = <<表达式
7.14.9 lvalue =&expression
7.14.10 lvalue = ^ expression
7.14.11 lvalue = | 表达形式为''E1 = op E2''的表达式的行为可以通过将其等同于''E1 = E1 op E2''来推断; 但是,E1仅评估一次.此外,禁止将指针添加到整数的"i = + p"这样的表达式.
另外,L Rosler在"UNIX®系统:读物和应用,第二卷"中有一篇论文" C的演变 ",最初由AT&T出版,作为1984年10月的技术期刊,后来由Prentice-Hall于1987年出版(国际标准书号0-13-939845-7).其中一部分是:
不可避免地,所做的一些更改改变了现有有效程序的语义.那些维护内部使用的各种编译器的人试图确保程序员有足够的警告说这些更改将生效,并且引入新的编译器版本并不会强制所有程序立即重新编译.
例如,在最早的实现中,模糊表达
x=-1被解释为表示"将x递减1".它现在被解释为"将值-1分配给x".这一变化发生在三个年度主要版本的过程中.首先,lint更改编译器和程序验证程序以生成关于存在"老式"赋值操作的消息警告,例如=-.接下来,解析器被更改为新的语义,编译器警告模糊的赋值操作.最后,消除了警告信息.支持使用"老式初始化"
Run Code Online (Sandbox Code Playgroud)int x 1;(没有等号)被类似的策略所取代.这有助于解析器生成更智能的语法错误诊断.
可以预见的是,一些C用户忽略了警告,直到引入不兼容的编译器迫使他们在更改过时的源代码或假设维护自己的编译器版本之间做出选择.但总的来说,分阶段变革的策略是成功的.
use*_*653 12
这只是一次性的加分.
#include <stdio.h>
int main() {
int a;
a =+ 5;
printf("%d\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印"5".更改a =+ 5为a =- 5并打印"-5".a =+ 5可能更容易阅读a = +5.
我认为
a =+ 5;
Run Code Online (Sandbox Code Playgroud)
应该相当于
a = (+5);
Run Code Online (Sandbox Code Playgroud)
因此是非常糟糕的代码.
我尝试了以下代码并打印"5":
#include <iostream>
using namespace std;
int main()
{
int a=2;
a =+ 5;
cout << a;
}
Run Code Online (Sandbox Code Playgroud)