학교에서 과제하다가 조교님이 이 코드 쓰면 안 된다고 하셨는데 이유를 제대로 설명 안 해주셔서 답답합니다.


int i = 5;
i = i++;
printf("%d\n", i); // 5? 6?


제 컴퓨터에서는 5가 나오는데 친구 노트북에서는 6이 나온다고 하더라고요. 비슷하게 이런 것도요.


int i = 1;
int j = i++ + ++i;
printf("%d\n", j);


이것도 컴파일러마다 값이 다르게 나온다는데, 제 입장에서는 어쨌든 컴파일도 되고 결과도 나오니까 그냥 정의된 거 아닌가 싶거든요. 근데 "미정의 동작(undefined behavior)"이라고 하는 이유가 뭔지, 왜 컴파일러마다 다른 건지 제대로 이해하고 싶습니다.