在下面的代码中:
main()
{
int i = 5;
printf("%d", ++i++);
}
Run Code Online (Sandbox Code Playgroud)
本程序给出错误"L-Value required".
有人可以告诉我:为什么编译错误?
因为后缀运算符的优先级高于前缀运算符,所以表达式++i++等价于 ++(i++),相当于 ++( i + 1).编译器给左值错误,因为你申请++一个表达式(i++)是不是修改的左值,所以不能有效的表达Ç根据增加的操作符定义.
根据Dennis M. Ritchie的书:"C编程语言":
2.8增量和减量运算符
(第44页)
递增和递减运算符只能应用于变量; 表达就像
(i + j)++是非法的.操作数必须是modifiable lvalue算术或指针类型.
相关:在gcc 4.4.5中可能想知道的一个有趣的错误是表达式j = ++(i | i);编译应该产生l值错误.阅读:j = ++(i | i);并且j = ++(i & i);应该出错:左值?
此外,没有中间修改相同的变量更多然后在表达一旦序列点的原因是不确定的行为在Ç和C++.理解阅读解释这些未定义的行为i = i++ + ++i;.
| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |