5.1 간단한 문장
● 표현문 : 표현식에 세미콜론을 붙인 것
● 널 문
○ 널 문은 세미콜론 하나이다.
○ 널 문에는 주석을 붙인다. 그렇게 하면 의도적으로 문장을 생략했음을 알릴 수 있다.
● 빠뜨리거나 관계없는 세미콜론에 주의한다.
● 복합문(구역)
○ 복합문은 일반적으로 구역이라고 하며 중괄호 쌍으로 둘러싼 일련의 문장과 선언인데 그 중괄호 쌍 안은 비어 있을 수 도 있다.
○ 구역은 세미콜론으로 마치지 않는다.
5.2 문장 유효 범위
● if, switch, while, for 문과 같은 제어 구조 안에 변수를 정의할 수 있다.
● 제어 구조에서 정의한 객체의 값은 해당 사용하므로 그런 변수는 반드시 초기화해야 한다.
5.3 조건문
5.3.1 if 문
● if문에서 지정한 조건이 참인지에 따라 조건적으로 다른 문장을 실행한다. if 형식은 두 가지인데 하나는 else 분기가 있는 것이고 다른 하나는 분기가 없다.
● if else 문 사용하기
● 중첩한 if 문 ㅠ
● 중괄호에 주의한다.
○ 여러 문장을 구역 하나로 실행해야만 할 때 저지르는 가장 흔한 실수는 중괄호를 빠뜨리는 것이다.
● 모호한 else
○ c++에서는 각 else를 앞서 나온 if 중에서 다른 else와 결합하지 않았으며 가장 가까운 것과 결합하도록 지정해 모호함을 해결한다.
5.3.2 switch 문
● switch 문을 사용하면 많은 수의 정해진 방법 중 하나를 편리하게 선택할 수 있다.
● 프로그램 논리 흐름
○ 입력에서 모든 문자를 읽는다.
○ 각 문자를 모음 집합과 비교한다.
○ 문자가 모음 중 하나와 일치하면 해당 모음 개수에 1을 더한다.
○ 결과를 출력한다.
● case 레이블 : case 키워드와 이에 연관된 값
● case 마지막에서 break를 생략하는 일은 드물다. break를 생략한다면 논리를 설명하는 주석을 적는다.
● break를 빠뜨리는 것은 흔한 버그 원인이다.
● default 레이블
○ switch 표현식 값과 일치하는 case 레이블이 없으면 default 레이블 다음 문장을 실행한다.
○ default인 경우에 하는 일이 없더라도 default 레이블을 정의하는 것이 유용할 수 있다. 빈 default를 정의한 것은 이 경우를 고려했음을 나타낸다.
5.4 반복문
5.4.1 while 문
● while 문은 조건이 참인 동안 대상 문장을 반복해 실행한다.
● while 조건이나 while 본체에서 정의한 변수는 매 반복마다 생성, 소멸을 반복한다.
5.4.2 전통적인 for 문
● for 문의 문법 형식
for ( 선언 : 표현식) {
문장
}
for ( 초기화식; 조건; 표현식 ) {
문장
}
● for 헤더 안에서 정으히나 모든 객체의 가시성은 for 루프 본체에 한정한다는 점을 기억한다.
● for 헤더에서 다중 정의
○ 다른 선언과 마찬가지로 초기화문에서도 여러 객체를 정의할 수 있다. 하지만 초기화문에서 선언문은 단 하나여야 한다.
● for 헤더에서 생략하는 부분
○ for 헤더에서는 초기화문, 조건, 표현식 중 일부(또는 모두)를 생략할 수 있다.
5.4.3 범위 for 문
● 표현 형식
for ( 선언 : 표현식) {
문장
}
● 표현식은 반드시 중괄호 초기 값 목록과 같은 순차열, 배열, 반복자를 반환하는 begin과 end 멤버가 있는 vector나 string과 같은 타입인 객체를 나타내야한다.
● 예시
vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 범위 변수는 각 요소에 기록할 수 있도록 참조자여야 한다.
for ( auto &r : v) // v의 각 요소에 대해
r *= 2; // v의 각 요소 값을 2배 한다.
5.4.4 do while 문
● 적어도 한번은 실행한다.
● do while은 괄호로 둘러싼 조건 다음에 세미콜론으로 마친다.
5.5 분기문
● 분기문은 실행 흐름을 가로챈다.
5.5.1 break 문
● break 문은 가장 가까이에서 둘러싸고 있는 while, do while, for, switch 문을 종료한다.
5.5.2 continue 문
● continue 문에서는 가장 가까이에서 둘러싸고 있는 루프의 현재 반복을 종료하고 증시 다음 반복을 시작한다.
5.5.3 goto 문
● goto 문을 사용하면 해당 goto에서 같은 함수 내 다른 문장으로 무조건 분기를 할 수 있다.
● 프로그램에서는 goto를 사용하지 않는 것이 좋다. goto를 사용하면 프로그램을 이해하기도 고치기도 어려워진다.
5.6 try 구역과 예외 처리
● throw 표현식 : 감지부에서 처리할 수 없은 무언가를 만났음을 나타내는 데 사용한다. 이때 throw에서 예외를 일으킨다라고 한다.
● try 구역 : 처리부에서 예외를 처리하는 데 사용한다. try 구역은 try 키워드로 시작하고 하나 이상인 catch 절로 마친다.
● exception 클래스 집합은 발생한 것에 대한 정보를 throw와 연관된 catch 사이에 전달하는 데 사용한다.
5.6.1 throw 표현식
● 프로그램 감지부에서는 throw 표현식을 사용해 예외를 일으킨다.
● throw 표현식의 타입으로 발생하는 예외 종류를 결정한다.
● throw 표현식에는 일반적으로 표현식 문장임을 나타내는 세미콜론을 붙인다.
5.6.2 try 구역
● 형식
try {
프로그램-문장
}
catch ( 예외 - 선언) {
처리자 - 문장
}
catch ( 예외 - 선언) {
처리자 - 문장
} // ...
● 처리자를 찾는 동안 함수를 빠져나간다.
○ 적합한 catch를 찾지 못하면 terminate 라이브러리 함수로 실행을 옮기는데 이 함수는 시스템에 따라 다르긴 하지만 프로그램을 더 이상 실행하지 않고 중단함을 보장한다.
5.6.3 표준 예외
● 예외 클래스는 네 가지 헤더에서 정의한다.
○ exception 헤더에서는 가장 일반적인 예외 클래스인 exception을 정의한다. 이는 예외가 발생한 것만 알리며 다른 추가 정보는 제공하지 않는다.
○ stdexcept 헤더에서는 몇 가지 일반적인 목적의 예외 클래스를 정의한다.
○ new 헤더에서는 bad_alloc 예외 타입을 정의하는데 이에 대해서는 12.1.2 절에서 다룬다.
○ type_info 헤더에서는 bad_cast 예외 타입을 정의하는데 이에 대해서는 19.2절에서 다룬다.
● 예외 클래스 라이브러리에는 모든 예외 타입 객체에 대해 생성, 복사, 대입을 할 수 있을 정도로 몇 가지 연산만 있다.
'C++ Primer' 카테고리의 다른 글
클래스 (0) | 2024.07.08 |
---|---|
함수 (0) | 2024.07.02 |
표현식 (0) | 2024.06.26 |
문자열, 벡터와 배열 (0) | 2024.06.26 |
변수와 기본 타입 (0) | 2024.06.25 |