Depois de ler esta resposta sobre comportamento indefinido e pontos de sequência, escrevi um pequeno programa:
#include <stdio.h>
int main(void) {
int i = 5;
i = (i, ++i, 1) + 1;
printf("%d\n", i);
return 0;
}
A saída é 2
. Oh Deus, eu não vi o decréscimo chegando! O que esta acontecendo aqui?
Além disso, ao compilar o código acima, recebi um aviso dizendo:
px.c: 5: 8: aviso: o operando esquerdo da expressão de vírgula não tem efeito
[-Wunused-value] i = (i, ++i, 1) + 1; ^
Por quê? Mas provavelmente será respondido automaticamente pela resposta da minha primeira pergunta.
printf("2\n");