Po przeczytaniu tej odpowiedzi o niezdefiniowanych zachowaniach i punktach sekwencji napisałem mały program:
#include <stdio.h>
int main(void) {
int i = 5;
i = (i, ++i, 1) + 1;
printf("%d\n", i);
return 0;
}
Wynik jest 2
. O Boże, nie widziałem nadchodzącego dekretu! Co tu się dzieje?
Ponadto podczas kompilacji powyższego kodu otrzymałem ostrzeżenie o treści:
px.c: 5: 8: ostrzeżenie: lewostronny operand wyrażenia przecinka nie ma żadnego efektu
[-Wunused-value] i = (i, ++i, 1) + 1; ^
Czemu? Ale prawdopodobnie automatycznie odpowie na to odpowiedź na moje pierwsze pytanie.
printf("2\n");