¿Cuál es el resultado de + = en C y C ++?

Tengo el siguiente código:

#include <stdio.h>
int main(int argc, char **argv) {
    int i = 0;
    (i+=10)+=10;
    printf("i = %d\n", i);
    return 0;
}

Si intento compilarlo como una fuente de C usando gcc obtengo un error:

error: lvalue required as left operand of assignment

Pero si lo compilo como una fuente de C ++ usando g ++ no obtengo ningún error y cuando ejecuto el ejecutable:

i = 20

¿Por qué el comportamiento diferente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta