为什么 a++++b 不起作用?

2024-01-08

int main ()
{
   int a = 5,b = 2;
   printf("%d",a+++++b);
   return 0;
}

此代码给出以下错误:

错误:需要左值作为增量操作数

但如果我在整个过程中添加空格a++ + and ++b,然后就可以正常工作了。

int main ()
{
   int a = 5,b = 2;
   printf("%d",a++ + ++b);
   return 0;
}

第一个示例中的错误意味着什么?


编译器是分阶段编写的。第一阶段称为词法分析器,它将字符转换为符号结构。所以“++”变成了类似enum SYMBOL_PLUSPLUS。随后,解析器阶段将其转变为抽象语法树,但它无法更改符号。您可以通过插入空格(结束符号,除非它们在引号中)来影响词法分析器。

普通的词法分析器是贪婪的(有一些例外),所以你的代码被解释为

a++ ++ +b

解析器的输入是符号流,因此您的代码将类似于:

[ SYMBOL_NAME(name = "a"), 
  SYMBOL_PLUS_PLUS, 
  SYMBOL_PLUS_PLUS, 
  SYMBOL_PLUS, 
  SYMBOL_NAME(name = "b") 
]

解析器认为这在语法上是不正确的。 (根据评论进行编辑:语义上不正确,因为您不能将 ++ 应用于右值,而 a++ 会导致右值)

a+++b 

is

a++ +b

这没关系。你的其他例子也是如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 a++++b 不起作用? 的相关文章

随机推荐

  • 动画 SVG 路径填充自下而上

    我有一个带有多个路径的 SVG 我正在尝试对其填充进行动画处理 我的目标是制作一个动画 从下到上缓慢地填充每个路径中不同颜色的颜色 我尝试过使用线性渐变 但不知道如何将它与路径一起使用 我创建了以下 SVG https jsfiddle n
  • 如何重用带参数的 SQL 片段?

    我打算制作一个片段以便与参数一起重用
  • Visual Studio 中的项目目录结构丢失了?

    我正在学习 Visual Studio 2015 社区 我是一位经验丰富的程序员 但刚接触 VS 文件表示方式让我感到困惑 我创建了一个解决方案 并添加了一个现有项目 VS 正在向我显示所有项目文件 在我的例子中是一个 C 项目 所以 c
  • 如何按需启用 javax.net.debug

    我们的应用程序使用 Apache HttpClient 4 5 3 我们观察到客户端和服务器之间使用 SNI 功能进行通信的非常奇怪的行为 服务器配置为如果 SSL 请求带有我们客户端期望的服务器名称 即 服务器的主机名 则返回 GoDad
  • 仅列出城市名称 Geocomplete.js 或 Google 位置自动完成

    我只想使用 Geocomplete js 显示城市名称 我已将搜索限制为仅显示城市 但它最后仍然显示国家名称 美国 我想摆脱它 有任何建议请 Thanks 很高兴我终于找到了 geocomplete js 的解决方案 希望它对某人有用 解决
  • 不允许在 Web 线程上使用多个锁!请提交错误。现在崩溃了

    我发出一个 url 请求并等待答案 我启动请求 然后等待直到 synchronousOperationComplete TRUE NSRunLoop theRL NSRunLoop currentRunLoop while synchron
  • 如何在MPandroidchart库中使用图标作为饼图的标签

    我正在使用 mpandroidchart 库来构建饼图 饼图的要求是每个条目中都应包含图标 In my case it is showing up the percentage of each entry values 有什么办法可以将标签
  • node.js - ReferenceError:导航器未定义

    我越来越ReferenceError 导航器未定义在node js上运行以下代码 navigator geolocation getCurrentPosition data gt console log data 我认为问题在于导航器 地理
  • 灯箱图片下载

    我在多个图片库中使用 Lightbox 2 我想为我的用户提供一种在灯箱中查看图像时下载图库中的图像的方法 如果有一个 下载 按钮就完美了 我把它想象在标题附近 问题是我对Javascript很烂 这个项目是一个不经常使用的内部工具 我自愿
  • Bokeh:将变量传递给小部件的 CustomJS

    Bokeh 的一个好处是 可以从 Python 层指定回调 从而在 javascript 级别上产生操作 而无需 bokeh 服务器 因此 人们可以创建在浏览器中运行的交互式小部件 而无需运行 Ipython 或 Bokeh 服务器 0 9
  • 如何从 Pandas 字典中存在的数据框列中删除单词

    扩展至 从字符串中删除单词列表 https stackoverflow com questions 25346058 removing list of words from a string 我有以下数据框 我想从 df name 列中删除
  • MongoDB 嵌入式集合的首选模式。文档与数组

    我相信至少有两种方法可以在 mongodb 文档中嵌入数据 在一个简化的情况下 我们可以有这样的东西 name bill lines idk73716 name Line A idk51232 name Line B idk23321 na
  • Thrift python 3.4 TypeError:需要字符串参数,得到“字节”

    我正在尝试阿帕奇节俭 https thrift apache org 使用 Thrift 似乎支持的 python 3 4 因为它有lib linux x86 64 3 4 under build目录 但我不断收到此错误消息 File ho
  • 如何将整个脚本放入循环中?

    我在编码方面没有任何经验 但我把我的野心用 python 编写了一些游戏代码 一切都很完美 D 但我有一个问题 我不知道如何无限重复代码 我在网上查了一下 但不太明白 我将在这里展示部分代码 也许有人可以解释我如何将所有代码放入 重复 中
  • C# 用户不活动的时间有多久

    一些背景 我正在编写一个具有多种表单等的应用程序 用户必须登录才能使用大部分功能 到目前为止效果很好 然而 现在 客户端请求用户在一定时间的不活动时间后注销 问题是用户仍然可以在计算机上处 于活动状态 只是不能在我的应用程序中处于活动状态
  • 具有相等填充的线性布局中的子项

    我目前正在设计一个带有 5 个按钮的 ButtonBar 它们都是 ImageButton 但目前只有 3 个 这是我的第一个 Android 项目 所以我一边做一边学习 我试图平均分配每个按钮的权重 而不缩放它们 具有相等的填充而不是相等
  • 在重新启动时保留应用程序状态

    我一直在尝试通过序列化我的主应用程序来保留 iPhone 应用程序的状态UITabBarController using NSKeyedArchiver archiveRootObject toFile 但我遇到了困难 首先我遇到了一个问题
  • 在 NetBeans 上使用 Armadillo 库编译 C++

    我将编译包含犰狳库的 C 程序 通过命令行使用以下命令可以解决此问题 g arm cpp o example O1 larmadillo 但是 当我将 O1 larmadillo 添加到 NetBeans 项目的编译选项时 出现了大量错误
  • 将 csv 导入到 iPhone 的 coredata sqlite

    如何将 csv 导入到 sqlite iPhone 的核心数据 我尝试过使用 SQLite 管理器 但它将 csv 导入到新表中 我还需要导入一些日期 那么如何将数据导入到我的sqlite数据库中呢 我有 3 个具有不同属性的实体 并且在
  • 为什么 a++++b 不起作用?

    int main int a 5 b 2 printf d a b return 0 此代码给出以下错误 错误 需要左值作为增量操作数 但如果我在整个过程中添加空格a and b 然后就可以正常工作了 int main int a 5 b