[C++ Primer] Chapter 5 Statements
summary of C++ Primer chapter 5
- 문장은 순차적으로 실행한다. 이는 부족해서 C++ 에서는 흐름을 제어하는 문장의 집합을 정의한다.
5.1 간단한 문장
- C++에서 문장 대부분은 세미콜론으로 마친다. 이는 표현문이라고 한다.
- 표현문에서는 표현식을 평가하고 결과를 버릴 수 있다.
- 널 문
- 가장 간단한 문장은 빈 문장이며 흔히 널 문이라고 한다. 세미콜론 하나이다.
- 문장이 필요하지만 프로그램 논리 구조는 필요하지 않을 경우 사용한다.
- 널 문에는 주석을 붙여서 의도적으로 문장을 생략했음을 표기한다.
- 빠뜨리거나 관계없는 세미콜론에 주의한다.
- 널 문은 흔히 아무런 문제가 없지만 while이나 if문 바로 뒤에 쓰면 루프 본체를 무시하는 결과를 초래할 수 있다.
- 복합문(구역)
- 복합문은 일반적으로 구역이라고 하며 중괄호 쌍으로 둘러싸여진 일련의 문자열이다. 유효범위와 같은 말이다.
- 구역은 세미콜론으로 마치지 않는다.
- 빈 구역은 널 문과 같다.
5.2 문장 유효 범위
if, switch, while, for
문과 같은 제어 구조 안에 변수를 정의할 수 있다. 이 변수는 해당 문장 안에서만 볼 수 있고 마치면 유효범위를 벗어난다.- 이러한 변수는 반드시 초기화 해야한다.
5.3 조건문
- C++에서는 2가지 조건문이 있다.
if
문은 조건에 따라 제어 흐름을 결정하고switch
문은 정수 표현식을 평가하고 이 표현식 값에 따라 여러 실행 경로 중 하나를 선택한다.
5.3.1 if
문
if
문에서는 지정한 조건이 참인지에 따라 조건적으로 다른 문장을 실행한다.
1
2
3
4
5
6
if (조건) {
문장
}
else {
문장
}
- 조건은 표현식이나 초기화한 변수 선얼 일 수 있는데, 이 표현식 또는 변수는
bool
로 변환할 수 있는 타입이어야 한다. - 중첩합
if
문 - 중괄호에 주의한다
if else, while, for
모두 항상 중괄호를 사용하는 것이 좋다.
- 모호한
else
- C++ 에서는 각
else
를 앞서 나온if
중에서 다른else
결합하지 않았으며 가장 가까운 것과 결합하도록 지정해 모호함을 해결한다.
- C++ 에서는 각
- 중괄호로 실행 경로 제어하기
- 양쪽
if
를 구역으로 둘러싸else
를 바깥쪽if
와 결합하도록 할 수 있다.
- 양쪽
5.3.2 switch
문
switch
문을 사용하면 (가능한 매우) 많은 수의 정해진 방법 중 하나를 편리하게 선택할 수 있다.switch
문에서느 괄호에 있는 표현식을 평가한다. 이 표현식은 초기화한 변수 선언일 수 있다.- 표현식이
case
레이블과 값이 일치하면 해당 레이블 다음 첫 문장을 실행하고, 일반적으로 그 문장 부터break
또는switch
문 끝까지 실행한다. case
키워드와 이에 연관된 값을 모두 포함해case
레이블 이라 한다. 반드시 정수 상수 표현식이어야 한다.switch
내 제어 흐름case
마지막에서break
를 생략하는 것은 드문 일이다.break
를 생략하면 논리를 설명하는 주석을 주로 적는다.
break
를 빠뜨리는 것은 흔한 버그 원인이다.switch
에서 마지막 레이블 다음에는break
를 포함할 필요가 없지만 사용하는 것이 가장 안전하다. 그렇게 해두면 나중에case
를 추가하더라도break
를 빠뜨릴 염려가 없다.
default
레이블switch
표현식 값과 일치하는case
레이블이 없으면default
레이블 당므 문장을 실행한다.
switch
본체 안에서 변수 정의- 유효 범위 내에서 초기값을 지정한 변수가 없는 곳에서 유효 범위 내에 그 변수가 있는 곳으로 건너뛰는 것은 옳지 않다.
5.4 반복문
5.4.1 while
문
- 조건이 참일 동안에만 대상 문장을 반복해 실행한다.
1
2
3
while (조건) {
문장
}
- 조건은 표현식이나 초기화한 변수 선언일 수 있다
while
루프 사용하기
5.4.2 전통적인 for
문
1
2
3
for (초기화식; 조건; 표현식) {
문장
}
for
와 괄호안 부분은 흔히for
헤더라고 부른다.- 전통적인
for
루프에서 실행 흐름 for
헤더에서 다중 정의- 초기화문에서도 여러 객체를 정의할 수 있다. 하지만 초기화문에서 선언문은 단 하나여야 한다. 그러므로 모든 변수는 바탕 타입이 같아야한다.
for
헤더에서 생략하는 부분for
헤더에서는 초기화문, 조건, 표현식 중 일부(또는 모두)를 생략할 수 있다.- 널 문으로 대체하면 된다.
5.4.3 범위 for
문
- 컨테이너나 다른 순차열의 요소를 모두 반복하는데 사용할 수 있는, 더 간단한
for
문이다.
1
2
3
for (선언: 표현식) {
문장
}
5.4.4 do while
문
- 본체를 실행한 후 조건을 확인함므로 조건 값에 관계없이 루프를 적어도 한번 실행한다.
1
2
3
do
문장
while (조건)
- 조건 내에서 변수 정의를 할 수 없다.
5.5 분기문
5.5.1 break
문
- 가장 가까이에 있는
while, do whilem, for, switch
문을 종료한다.
5.5.2 continue
문
- 가장 가까이에서 둘러싸고 있는 루프의 현재 반복을 종료하고 즉시 다음 반복을 시작한다.
5.5.3 goto
문
- 해당
goto
에서 같은 함수 내 다른 문장으로 무조건 분기할 수 있다. - 프로그램에서
goto
를 쓰지 않는 것이 좋다. 이해하기 어렵고 고치기도 어렵다.
1
goto 레이블
- 레이블은 문장을 식별하는 식별자이다. 레이블문은 콜론을 뒤에 붙인 식별자 다음에 오는 문장이다.
5.6 try
구역과 예외 처리
- C++에서 예외 처리는 다음과 같이 한다.
throw
표현식 - 감짐부에서 처리할 수 없는 무언가를 만났음을 나타내는 데 사용한다. 예외를 일으킨다고 한다.try
구역 - 처리부에서 예외를 처리하는 데 사용한다. 하나 이상인catch
절로 마친다.catch
문은 예외 처리자라고도 한다.exception
클래스 - 발생한 것에 대한 정보를throw
와 연관된catch
사이에 전달하는 데 사용한다.
5.6.1 throw
표현식
- 프로그램 감지부에서는
throw
표현식을 사용해 예외를 일으킨다. - 예외를 발생시키면 현재 ㅎ마수를 마치고 이 오류를 처리할 수 있는 처리자로 제어를 옮긴다.
5.6.2 try
구역
1
2
3
4
5
6
7
try {
프로그램-문장
} catch (예외-선언) {
처리자-문장
} catch (예외-선언) {
처리자-문장
}
- 처리자를 찾는 동안 함수를 빠져나간다.
- 예외를 발생하는 코드를 만나기 전에 여러
try
구역을 지날 수 있다. 이러면 가장 가까운 곳에서catch
를 찾고 갈수록 더 먼 함수에서catch
를 찾는다. 없으면 프로그램을 종료한다.
- 예외를 발생하는 코드를 만나기 전에 여러
5.6.3 표준 예외
exception, stdexcept, new, type_info
헤더에서 예외 클래스를 정의한다.
This post is licensed under CC BY 4.0 by the author.