정확히 언젠지
[C] 후위연산은 그줄 세미콜론 후에 실행되나요?
얍(211.246)
2012-05-22 10:53
추천 0
댓글 8
다른 게시글
-
여기 병특 몇명있음? [2]DeCoY(bluecode) | 12.05.22추천 0
-
자바 옵젝트C C# 배우고 있는 애들 안심해라 [1]ㅇ(125.177) | 12.05.22추천 0
-
음성인식에 대한거 하려면 뭐 찾아봐야됨? [6]?(210.98) | 12.05.22추천 0
-
야 WINAPI 볼려면 꼭 C나 C++ 선행학습되야만이 가능한거냐? [6]야기분조타(210.123) | 12.05.22추천 0
-
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ백왕(203.248) | 12.05.22추천 0
-
홍기가 정희랑 무슨 관계예요?프로그래밍(61.39) | 12.05.22추천 0
-
안녕 게이형들 ? [5]호랑이주스(hanhbin) | 12.05.22추천 0
-
차기 모바일 언어는 NODEJS느님이 [1]d(125.177) | 12.05.22추천 0
-
캐닭은 봄미다 [27]페고때찌(pegotezzi) | 12.05.22추천 0
-
생각하는대로 코딩해서 에러하나없이 [2]컴공(121.139) | 12.05.22추천 0
int prefix_inc (int &x) { x = x + 1; return x; }
int postfix_inc(int &x) { int tmp = x ; x = x + 1; return tmp; }
프리픽스는 먼저 증가시키고 그 변수를 반환하고, 포스트픽스도 마찬가지로 먼저 증가시키는 건 같은데, 반환값이 증가시키기전의 값.
디스어셈블리 해보세요. 그럼 확실히 알 수 있겠죠. 비주얼 스튜디오 디버그 모드에서 Alt + 8이던가? 보통 그 문장이 실행하는 명령어가 모두 실행된 후에 덧셈 연산이 실행되겠죠. 기계어 관점에서 보면 C언어 한 문장이 곧 명령어 하나는 아니니까요. 컴파일러가 어떻게 기계어를 번역하는가에 따라 다를 테니 간단히 프로그램 짜서 디스어셈블리 한 번 해보세요.
그런거 할 줄모르는데 ㅠ
기계어나 어셈블리처럼 low-level에서 생각할 게 아니라면 그냥 문장을 나눠서 생각하는 게 편하지 않을까 싶네요. if(++num == 1){ }이면 num+=1; if(num == 1){...} 이런 식으로... 간단한 소스를 디스어셈블리 해봤는데 생각했던 거랑은 다르게 나오더라고요. 정확히 언제 ADD가 되는가를 따지면 오히려 헷갈릴 듯.
그냥 후위 연산은 그 연산이 포함된 문장이 다 실행된 후 실행된다고 보면 될 것 같네요. 어셈블리로 보니 실제로는 기계어 수준에서는 덧셈이 그것보단 일찍 실행되고, 메모리에도 값이 변경되는데요. 내부적으로 일단 다른 레지스터를 이용해서 덧셈 전의 값을 저장하고, 그 다음 변수를 증가시키고, 덧셈 전의 값을 이용해 현재 작업에 이용하는 것 같아요. 저도 어셈블리는 어설프게 알아서 ^^;;;
우왕...고맙소