时
--foo++;
C中的有效声明? (它会编译/运行)是否有任何实际应用?
很抱歉在编辑中更改了问题,但我发现了一些问题。
根据我的C ++编译器(Visual Studio 2010):
--++foo;
是一个有效的命令,但
foo--++;
不是。这有什么理由吗?
答案 0 :(得分:8)
不,它无效,因为增量/减量运算符的结果不是左值。
编辑: OP通过添加另外两个示例来编辑他的问题。所以我们走了,出于同样的原因:
--++foo;
--foo++;
foo--++;
都是无效的表达式语句,因为递增/递减运算符的结果不是左值。编译器可以扩展语言并接受这些表达式,但严格符合的程序不能包含任何这些表达式。
答案 1 :(得分:0)
由于这是一个C表达式,它应该遵循一些级联评估步骤来找出结果。
你的表达是
- ++ FOO;
好吧让我们评估一下 第一步: -
++ FOO;
必须评估才能继续
这是一些预增量,所以foo变成了foo + 1。
然后分配发生
这是对foo = foo + 1;
的评价和foo的值返回以赋值给变量(如果不存在则忽略)。
所以现在我们的表达式如下
- (++ FOO);评估为
- (常数值); // foo + 1
的结果再次声明评估如
常量值= constant_valu + 1; //右边部分正常但左边部分不是变量
由于赋值运算符的左侧不是变量并且引发错误。
所以现在没有 - /减量运算符的有效操作数所以左值必需的错误