Qual é o resultado de + = em C e C ++?

Eu tenho o seguinte código:

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

Se eu tentar compilá-lo como uma fonte C usando o gcc, recebo um erro:

error: lvalue required as left operand of assignment

Mas se eu compilar como uma fonte C ++ usando g + + eu não recebo nenhum erro e quando eu executar o executável:

i = 20

Por que o comportamento diferente?

questionAnswers(2)

yourAnswerToTheQuestion