Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是=+;你的意思是C?_C_Operators - Fatal编程技术网

什么是=+;你的意思是C?

什么是=+;你的意思是C?,c,operators,C,Operators,我今天在一些C代码中遇到了=+而不是标准的+=;我不太清楚这里发生了什么。我在文档中也找不到它。它只是一元加号后面的赋值 #include <stdio.h> int main() { int a; a =+ 5; printf("%d\n",a); return 0; } #包括 int main(){ INTA; a=+5; printf(“%d\n”,a); 返回0; } 打印“5”。将a=+5更改为a=-5并打印“-5”。阅读a=+5的一种

我今天在一些C代码中遇到了
=+
而不是标准的
+=
;我不太清楚这里发生了什么。我在文档中也找不到它。

它只是一元加号后面的赋值

#include <stdio.h>
int main() {
    int a;
    a =+ 5;
    printf("%d\n",a);
    return 0;
}
#包括
int main(){
INTA;
a=+5;
printf(“%d\n”,a);
返回0;
}

打印“5”。将
a=+5
更改为
a=-5
并打印“-5”。阅读
a=+5
的一种更简单的方法可能是
a=+5

它是
+=
的一种古老的变体。在现代编译器中,这相当于赋值运算符后跟一元
+

我认为

a =+ 5;
应该相当于

a = (+5);
因此,代码的风格非常糟糕

我尝试了以下代码,结果显示为“5”:

#包括
使用名称空间std;
int main()
{
INTA=2;
a=+5;
在古老的C语言版本中,
=+
相当于
+=
。它的残余物与最早的恐龙骨骼一起被发现

例如,B引入了广义赋值运算符,使用
x+=y
y
添加到
x
中。该符号来自Algol 68,通过McIlroy,McIlroy将其并入了他的TMG版本中。(在B和早期C中,操作符的拼写是
=+
而不是
+=
;这个错误在1976年修复,是由B的词法分析器中处理第一个表单的一种非常简单的方法引起的。)

[C语言的发展,Dennis Ritchie.版权所有ACM,1993.内部引用省略。]


自20世纪70年代中期以来,它就没有什么特别的意义了——它只是一个
=
后跟一个
+

你可以在1979年1月的第7版UNIX手册(第2a卷)中找到旧符号的证据,该手册可在(大约从2015年7月起不可用;2015年6月版本现在可通过位于或的回程机器获得)

这一章的标题是Dennis M.Ritchie编写的“C参考手册”,它是手册的PDF版本,但不是HTML版本。 在相关部分,它说:

7.14.1左值=表达式

表达式的值替换左值引用的对象的值。操作数不必具有 类型相同,但都必须是int、char、float、double或pointer。如果两个操作数都不是指针,则赋值 按预期发生,可能在右侧表达式转换之前发生。 当两个操作数都是int或任何类型的指针时,都不会发生转换;表达式的值 简单地存储到左值引用的对象中。因此,可以生成指针,从而导致寻址 使用时的例外情况

7.14.2左值=+表达式
7.14.3左值=-表达式
7.14.4左值=*表达式
7.14.5左值=/表达式
7.14.6左值=%expression
7.14.7左值=>>表达式

7.14.8左值=在阅读您的问题后,我刚刚对这些问题进行了调查。让我告诉您我发现了什么。在gcc和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

这段代码是否如预期的那样工作?如果不是,那可能是一个打字错误。@TimCooper非常肯定,它有很多行,代码编译得很好。我使用的是microsoft visualstudios@SteveRowe:VS(与地球冷却后的任何编译器一样)将其视为=(+)我只是不明白为什么这些有趣的问题——但从根本上说是琐碎的、纯粹的娱乐——总是引起人们的注意(以及“竖起大拇指”)有几十个相同的答案,而问严肃问题的人往往会忽略其问题,而答案为0。回答琐碎的问题不需要努力。让我们回答困难的问题。@gd1:这可能是StackExchange模型中最大的缺陷。这类问题不仅很流行,而且通常与问题应该遵循的原则相矛盾d“基于您面临的实际问题”(),这使得该指南与社区对网站的实际使用有着荒谬的不一致。简言之,最不有用的问题得到了最高分数——这与投票的目的正好相反。我在meta上提出了这一点,但被否决了。但它不再被支持,因为它与一元++不明确。我可以确认
=+
最初与当前的
+=
相同。我不记得两者是否从一开始就有效,或者
=+
最初是唯一的选项,但无论如何都是(非常正确的)因为模棱两可而放弃。这可能只是一个VAX的东西,但我发誓我被教导+=是增量前的,=+是增量后的,我记得我们几乎总是完全一样的东西…但不是按照复杂的操作问题顺序。@markgz:见Dennis的第5页(警告:Postscript)在C的历史上,杰瑞,对于那些感兴趣的人来说,下面的文章是关于“=+”的:“…这个错误,在1976修复……1976是在我的时间之前。这个问题是关于C的,你是在谈论C++。我在VS2010中得到了与C文件相同的行为。查尔斯:我不是一个讲英语的母语者,那么“失效”怎么样??Deprecated更像是“standardese”,而不是英语。“Defunct”更好,因为它意味着它不起作用(在现代C实现中不起作用);Deprecated意味着它仍然受支持,但将来会被删除或删除。我不认为“Deprecated”或“Defunct”甚至“过时”问题是代码
a=+5
在现代标准中是完全有效的C,但它在语义上并不等同于
a+=5
(如果它曾经是-我相信你的话,但我一直是u
x=-1
  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 
  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