你能在c中的同一个语句中对同一个变量有一个增​​量器和一个增量器吗?

时间:2012-07-26 23:00:28

标签: c++ c post-increment pre-increment

--foo++;

C中的有效声明? (它会编译/运行)是否有任何实际应用?

很抱歉在编辑中更改了问题,但我发现了一些问题。

根据我的C ++编译器(Visual Studio 2010):

--++foo;

是一个有效的命令,但

foo--++; 

不是。这有什么理由吗?

2 个答案:

答案 0 :(得分:8)

不,它无效,因为增量/减量运算符的结果不是左值。

编辑: OP通过添加另外两个示例来编辑他的问题。所以我们走了,出于同样的原因:

--++foo;
--foo++;
foo--++;

都是无效的表达式语句,因为递增/递减运算符的结果不是左值。编译器可以扩展语言并接受这些表达式,但严格符合的程序不能包含任何这些表达式。

答案 1 :(得分:0)

由于这是一个C表达式,它应该遵循一些级联评估步骤来找出结果。

你的表达是

- ++ FOO;

好吧让我们评估一下 第一步: -

++ FOO;

必须评估

才能继续

这是一些预增量,所以foo变成了foo + 1。

然后分配发生

这是对foo = foo + 1;

的评价

和foo的值返回以赋值给变量(如果不存在则忽略)。

所以现在我们的表达式如下

- (++ FOO);评估为

- (常数值); // foo + 1

的结果

再次声明评估如

常量值= constant_valu + 1; //右边部分正常但左边部分不是变量

由于赋值运算符的左侧不是变量并且引发错误。

所以现在没有 - /减量运算符的有效操作数所以左值必需的错误