Pontos de sequência em printf
Eu liaqui que existe um ponto de sequência:
Após a ação associada ao especificador de formato de conversão de entrada / saída. Por exemplo, na expressãoprintf("foo %n %d", &a, 42)
, existe um ponto de sequência após o%n
é avaliado antes da impressão42
.
No entanto, quando eu corroesse código:
int your_function(int a, int b) {
return a - b;
}
int main(void) {
int i = 10;
printf("%d - %d - %d\n", i, your_function(++i, ++i), i);
}
Em vez do que eu espero, recebo:
12 - 0 - 12
Significando que havianão um ponto de sequência criado para o especificador de formato de conversão. Éhttp://en.wikipedia.org errado, ou acabei de entender algo errado ou o gcc não é compatível nesse caso (aliás, o Visual Studio 2015 gera o mesmo resultado inesperado)?
EDITAR:
Entendo que a ordem dos argumentos parayour_function
são avaliados e atribuídos aos parâmetros é indefinido. Não estou perguntando por que meu mandato intermediário é 0. Estou perguntando por que os outros dois termos são ambos 12.