a+++b 在编译基础上的讨论
来源:互联网 发布:长沙自考网络学校 编辑:程序博客网 时间:2024/04/28 04:16
关于讨论代码中的 c = a+++b 这个表达式的面试题一直都在出现。从很直观的角度上来说你可以理解成为以下的两种形式
一个是 c = (a++) + b; 另一种是c = a + (++b);
其实做过编译程序的人可以考虑以下过程,在词法分析阶段要进行的是将输入的文件切成token,并形成token序列,你可以知道
对+进行处理的时候将执行以下的代码,当编译程序读到+的时候,首先期望得到的是 = ,如果是,那么好, 是+=如果不适,那么期望得到的是 + ,如果是,那么得到的是 ++; 以上都不是 则后退返回。可见当编译程序遇到上面的表达式的时候,设当前读入字符是第一个+,那么编译程序期望得到的是=或者+,显然可以得到+,那么构成++,存入token,继续进行。所以上述表达式理解成为 c = (a++) + b;是正确的。
. . .case '+'://如果加号后面是 = 那么处理成为 +=if( CTokenizer::NextToken() == '=' ) { m_token.str = "+="; m_token.type = PLUS_ASSIGN;} else { CTokenizer::PushBack();//如果加号后面是 + 那么处理成为 ++ if( CTokenizer::NextToken() == '+' ) { m_token.str = "++"; m_token.type = PLUS_PLUS; } else CTokenizer::PushBack();}break; . . .
0 0
- a+++b 在编译基础上的讨论
- a+++b 在编译基础上的一点点讨论
- 7c 在7b的基础上 增加键盘操作
- 在编译安装好的php基础上安装php扩展
- usermod -a表示在原来所属组的基础上追加
- 在例12.3的基础上作以下修改,并作必要的讨论。
- 对min(a,b)这个宏的讨论(转)
- 对min(a,b)这个宏的讨论
- CodeForces 44B- A - Cola- 分类讨论
- 在前人的基础上更改的DWRProxy
- 在OpenFire的基础上安装JWChat 1.0
- Struts2在OGNL基础上的增强
- 在MSChart基础上的处理类库
- Struts2在OGNL基础上的增强
- 在simplesim3.0的基础上安装mp_simplesim
- Struts2在OGNL基础上的增强
- 在MSChart基础上的处理类库 .
- zend optimizer在wamp的基础上安装
- Android Handler之线程交互
- 页面js中文乱码
- 父母留给了我什么
- linux 负载均衡技术之 LVS
- 2dx解析cocosbuilder中使用layer时的缺陷
- a+++b 在编译基础上的讨论
- Ubuntu终端Terminal常用快捷键
- 身份证校验
- ThinkPHP-RBAC为角色分配权限之展示表单
- ubuntu14.04安装搜狗输入法
- 变量交换
- Java中数组和List集合如何互相转换。
- 关于js-binding中Layer触摸事件的优化
- VC++_文件选择器