你可以在c中的同一个语句中的同一个变量上有一个递增器和一个递减器

--foo++; 

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

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

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

 --++foo; 

是一个有效的命令,但

 foo--++; 

不是。 这有什么理由吗?

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

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

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

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

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

你的表达是

– ++ FOO;

好吧让我们评估这第一步: –

++ FOO;

必须进行评估才能继续

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

然后分配发生

这是对foo = foo + 1的评价;

和foo的值返回以赋值给变量(如果没有任何存在则被忽略)。

所以现在我们的表达如下

– (++ FOO); 评估为

– (常数值); // foo + 1的结果

再次声明评估如

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

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

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