C++ Primer

문장

kang057 2024. 6. 29. 19:14

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