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

Ash*_*thi 1 c c++ pre-increment post-increment

--foo++;
Run Code Online (Sandbox Code Playgroud)

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

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

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

--++foo;
Run Code Online (Sandbox Code Playgroud)

是一个有效的命令,但

foo--++; 
Run Code Online (Sandbox Code Playgroud)

不是.这有什么理由吗?

oua*_*uah 8

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

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

--++foo;
--foo++;
foo--++;
Run Code Online (Sandbox Code Playgroud)

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

  • @ RichardJ.RossIII` ++ E`相当于`E + = 1`,简单赋值和复合赋值的结果不是左值*(C99,6.5.16p3)"赋值表达式具有左操作数的值作业,但不是左值."* (2认同)
  • 混淆部分是因为在C++中赋值表达式_是左值,前缀增量和减量也是如此.但是因为这个问题被标记为__C__,所以@ouah是正确的. (2认同)