switch와 if 을 비교해보고 적절하게 사용하는 방법을 알아보자.
#include <stdio.h> int main(void) { int a, b, c, d, x = 0; int result; a = b = 3; c = 5; d = 6; result = (a * c) + b / d; if(result == 0) x = result + 5; else if(result == 1) x = result + 10; else if(result == 2) x = result + 15; else if(result == 3) x = result + 20; else if(result == 4) x = result + 25; else if(result == 5) x = result + 30; else x = 0; printf("%dn", x); return 0; }
if문을 역어셈블로 살펴보면 다음의 그림 처럼 else if 마다 비교 연산을 수행하고있다.
위의 예제 코드를 switch 문으로 표현한 것이다.
#include <stdio.h> int main(void) { int a, b, c, d, x = 0; int result; a = b = 3; c = 5; d = 6; result = (a * c) + b / d; switch(result) { case 0: x = result + 5; break; case 1: x = result + 10; break; case 2: x = result + 15; break; case 3: x = result + 20; break; case 4: x = result + 25; break; case 5: x = result + 30; break; default: x = 0; break; } printf("%dn", x); return 0; }
다음의 역어셈에서와 같이 최초 5보다 크면 default레이블로 분기되고 그렇지 않으면 result의 값에 따라 지정된 레이블로 점프됨을 알 수 있다.
인용 및 참고문헌: 임베디드 프로그래밍 c코드 최적화
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | C Programming FAQs(한글번역 pdf문서) | makersweb | 2014.03.18 | 27011 |
10 | 비트 필드의 크기는 해당 유형의 크기를 초과할 수 없다. | makersweb | 2023.04.25 | 464 |
9 | flexible array member 에 대해서 | makersweb | 2020.02.20 | 2042 |
8 | 배열과 포인터, 등가포인터 예제 | makersweb | 2019.01.16 | 1209 |
7 | 함수포인터와 typedef로의 선언 | makersweb | 2018.02.03 | 1256 |
6 | 예제소스를 통해 리틀엔디안(Little endian)과 빅엔디안(Big endian)의 차이점 알아보기 | pjk | 2014.05.24 | 8245 |
» | switch와 if 중 어느 것이 더 빠른가 | makersweb | 2017.01.31 | 2935 |
4 | volatile이 정확히 어떤 의미를 가지는 건가요? | pjk | 2014.09.30 | 4718 |
3 | unsigned형의 모든 상수에는 접미사 ‘U’를 사용하여야 한다. | pjk | 2014.05.24 | 37605 |
2 | void형 포인터 | pjk | 2014.05.24 | 5230 |
1 | C언어 강좌-배열과 포인터 | makersweb | 2014.03.10 | 4727 |