[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.