티스토리 뷰
증감연산자 계산 순서
C언어를 공부하다 신기한 것을 발견하였다.
#include <stdio.h>
int main()
{ int num = 10;
printf("%d %d", ++num, num++);
return 0;
}
이 코드의 출력 결과값은 무엇이 나올것 같은가? 11, 11 이라고 말을 하는 사람이 대다수일 것이다. 그러나 정작 코드를 실행해보면 12, 10이 출력되게 된다. 아니 이게 무슨 일인가 전혀 예상치 못한 값이 두개나 나와버린다. 다소 놀라웠다. 12, 10이 출력되는 이유는 printf문이 Stack에 쌓여서 실행되기 때문이다. ++num이 먼저 들어가고, num++이 나중에 들어가게된다. Stack의 자료구조는 LIFO(Last In First Out)의 형태를 취하고 있다. 이에 마지막에 들어간 num++이 먼저 실행되어 12, 10이 출력된다. 쉽게 말해서 뒤에서 부터 실행되는 것이다.
자바도 똑같은 결과인지 궁금하여 실행해보았다.
public class Main{
public static void main(String\[\] args){
int num = 10; System.Out.printf("%d %d", ++num, num++);
}
}
자바의 경우 11, 11이 출력되게 된다. 순차적으로 ++num, num++이 실행된것이다.
더 열심히 찾아본 결과 컴파일러와 JVM의 버전에 따라서 실행되는 순서가 다르다고 한다. 이에 하나의 출력문에 증감연산자를 여러개 쓰는 코딩 스타일은 지양해야할 것이다.
'기초부터 다지자!' 카테고리의 다른 글
Xcode 9.0 “No such module” Swift Error 해결 (1) | 2020.02.06 |
---|---|
대학 전공 공부 관련 참고 사이트 (0) | 2019.08.03 |
"Open Source and Future of Web" Google Engineer 초청강연 2018.09.10 (0) | 2018.09.11 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- MinGW 한글
- 계산 순서
- MinGW 한글 깨짐
- python list 팁
- 연산 순서
- 안스 프로젝트 구조
- res 의미
- C언어 한글
- C언어 배열 선언
- c언어 필드 폭지정
- printf 계산 순서
- printf 스택
- manifest 의미
- 윈도우 복붙
- CLion 한글
- 백준
- 증감연산자 계산 순서
- CLion 한글 깨짐
- 배열 메모리
- printf문 연산자
- 배열 메모리 할당
- 배열 주의사항
- 필드 폭 지정
- 앱 프로그래밍
- C언어 한글 깨짐
- 복붙하기
- c언어 공백 출력
- C언어 printf문
- 모바일 앱 설계
- 다이나믹 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함