Post

[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 결합하지 않았으며 가장 가까운 것과 결합하도록 지정해 모호함을 해결한다.
  • 중괄호로 실행 경로 제어하기
    • 양쪽 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.