Dlaczego wiele przyrostów / dekrementacji jest poprawnych w C ++, ale nie w C?

test. (c / cpp)

#include <stdio.h>

int main(int argc, char** argv)
{
  int a = 0, b = 0;
  printf("a = %d, b = %d\n", a, b);
  b = (++a)--;
  printf("a = %d, b = %d\n", a, b);

  return 0;
}

Jeśli zapiszę powyższe jako plik .cpp, kompiluje i wyświetla to po wykonaniu:

a = 0, b = 0
a = 0, b = 1

Jeśli jednak zapiszę go jako plik .c, pojawi się następujący błąd:

test.c:7:12: error: lvalue required as decrement operator.

Nie powinienem(++a) operacja zostanie rozwiązana przed(newValue)-- operacja? Czy ktoś ma na to jakiś wgląd?

questionAnswers(4)

yourAnswerToTheQuestion