b++ 이니까 출력 되는 시점에서 1 이고 그 담 a+b 연산일때 값이 1증가한 상태니까 2
y녀6디리(218.146)2011-08-27 21:33
줄이 끝나고 랍쇼?
y녀6디리(218.146)2011-08-27 21:34
컴파일러와 옵션에 따라 다르지요. b+1 이 b에 바인딩 되는 시점이 중요한데, 파라미터를 스택에 쌓는 순간에 처리하는 게 구현상 편리합니다. 안그러면, 파라미터랑 문장 파싱 방법이랑 코드 생성 방법을 구분해서 구현해야 하니까요. C 표준이 어떤지는 잘 모르겠습니다만, 님 생각대로 구현된 컴파일러도 어딘가는 있을 겁니다. 아무튼, 왠만한 컴파일러라면, 파라미터를 왼쪽부터 쌓을 경우 0 1 2가 될 테고, 오른쪽부터 쌓을 경우 0 1 1이 되겠지요. 왜냐하면, 스택에 쌓고나서 바인딩 되니까요. 어때요? 쉽죠? 참고로, 그런 코드는 앞으로 작성하지 마시길 바랍니다. 제가 하는 말이 아니라 국내외 석학들이 그리 말합니다. \"부작용의 여지가 있는 코드는 작성하지 말아라.\"
++이니까 [핡]
b++지나서 a+b일때 b는 이미 2 [핡]
가서 출력 후 연산이랑 연산 후 출력 부분 다시 보셈
visual studio 2010 쓰는데 0 1 2 나와서요 ㄷㄷ....
후위 연산 ++ 이자너 그줄 다 끝나고 ++ 연산시킨다.
b++ 이니까 출력 되는 시점에서 1 이고 그 담 a+b 연산일때 값이 1증가한 상태니까 2
줄이 끝나고 랍쇼?
컴파일러와 옵션에 따라 다르지요. b+1 이 b에 바인딩 되는 시점이 중요한데, 파라미터를 스택에 쌓는 순간에 처리하는 게 구현상 편리합니다. 안그러면, 파라미터랑 문장 파싱 방법이랑 코드 생성 방법을 구분해서 구현해야 하니까요. C 표준이 어떤지는 잘 모르겠습니다만, 님 생각대로 구현된 컴파일러도 어딘가는 있을 겁니다. 아무튼, 왠만한 컴파일러라면, 파라미터를 왼쪽부터 쌓을 경우 0 1 2가 될 테고, 오른쪽부터 쌓을 경우 0 1 1이 되겠지요. 왜냐하면, 스택에 쌓고나서 바인딩 되니까요. 어때요? 쉽죠? 참고로, 그런 코드는 앞으로 작성하지 마시길 바랍니다. 제가 하는 말이 아니라 국내외 석학들이 그리 말합니다. \"부작용의 여지가 있는 코드는 작성하지 말아라.\"
교훈 : 저 지랄로 코드를 짜지 않는다.
0 1 1 로 나오는데.. gcc에서