게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[정]컴파일러가 i++ 오류를 일으키는 이유는?
게시물ID : programmer_13827짧은주소 복사하기
작성자 : 니콜캣우먼
추천 : 0
조회수 : 555회
댓글수 : 19개
등록시간 : 2015/10/12 22:38:10
옵션
  • 본인삭제금지

C언어 증가,감소 연산자를 배우고 있었는데

int x=1, y=2, z=3;
x=++x*5;
y=y++*5;
z=5- --z;
printf(" x = %d ,  y = %d ,  z = %d \n",x,y,z);

return 0;

이렇게 쳤습니다. 

실행하면 어떻게 될까요?


.
.
.


x=10, y=10, z=3

이렇게 나옵니다.


하지만, 이는 틀렸습니다

sIuUtKm.jpg
심지어 책에도 y=11 이라고 써 있었습니다. 

그리고 저 또한, y는 11이 나와야 맞다고 저는 생각합니다
왜냐면 y=2 였기 때문에, 연산할 때는 2*5=10 이지만, 나중에 후치환 해 줘서 +1 , 결국 11이 되야한다고 생각 하기때문에!

...... 그러면 컴퓨터는 왜 이런 결과를 냈을까요???




'희대의 미스테리' 라면서 교수님이 다시 생각해 오신다고 하시곤 수업이 끝났어요

실화입니다.





-------------------------------------------질의응답후-------------------------------------------



많은 분들이 경험으로 알게된 좋은 정보를 댓글로 많이 달아주셨습니다.
요약 하자면, 

컴파일러 에서 저런 행동양식의 우선순위를 정하지 않아, 해석을 제맘대로 하기 때문에, 
루프문 이외에선 저런 걸 쓰지 않는게 좋다. 라는 결론을 얻었습니다.

본삭금 걸고 제목 바꾸었습니다.

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호