ITGenerations
[c++] summary 예외처리와 C언어와의 링크 지정 본문
실행 오류와 오류처리
*컴파일이 잘 된 프로그램도 예상치 못한 입력 값이나 논리적 실수로 실행 중에 오류가 발생할 수 있으며,
이 때 프로그램이 비정상 종료된다.
*실행 중에 발생하는 오류로 프로그램이 비정상 종료되는 것을 막기 위해, 실행 오류의 발생을 탐지하고 이에
대처하는 코드가 작성되어야 한다.
예외와 예외처리
*예외(exception)란 예상치 못한 입력이나 상황 발생으로 실행 오류를 유발할 수 있는 사건을 말하며,
예외 처리(exception handling)란 예외 발생 시 대처하는 코드이다.
*c++에서는 try-throw-catch 구조로 예외를 처리한다.
*c++에서의 예외처리는 운영체제가 알려주는 예외를 c++ 응용프로그램에서 처리하는 것이 아니다.
사용자가 작성한 프로그램 내에서 사용자 스스로 탐지한 실행오류를 예외로 처리하는 것을 말한다.
*예외를 탐지하고, 예외처리를 지시하는 throw 문을 가진 코드들을 try{ } 블록으로 묶는다.
*하나의 try { } 블록에는 반드시 1개 이상의 catch{ }블록이 연결되어야 하며, throw 문에 의해 던져진
예외를 처리할 catch() {} 블록이 없다면 시스테멩 의해 강제 종료된다. throw 문은 다음과 같이
예외 값을 던지는 문장이며, catch(){}블록은 ()안에 처리하고자 하는 에외 타입을 선언한다.
try{ throw 10; } catch(int x) {...} |
*throw문이 던지는 예외 값의 타입과 일치하는 catch() { }블록이 실행된다.
*catch() {} 블록이 실행된 후 정상적인 제어를 따라 계속 실행한다.
*try{ } 블록이나 catch() { } 블록내에 try-catch 블록을 둘 수 있다.
*try { } 블록 내에서 호출한 함수에서 throw 문이 실행되면 try{ } 블록과 연결된 catch() {} 블록으로 점프한다.
*throw 문을 가진 함수는 원형 선언문에 throw() 지시어를 두고 ()안에 예외 타입을 선언하여 함수가 발생시킬 수 있는
예외 타입을 알려준다. 다음은 max 함수가 int 타입의 예외를 발생 시킬 수 있음을 선언한다.
int max(int x, int y) throw(int); |
c++ 코드와 C 코드의 링킹
*소스 프로그램에 작성된 함수, 변수, 클래스를 컴파일하여 목적 파일에 저장할 때,
컴파일러는 이들의 이름을 변환하여 저장한다. 이것을 이름 규칙 혹은
naming mangling(네이밍 맨글링)이라고 부른다.
*C 컴파일러와 C++ 컴파일러의 이름 규칙이 서로 다르기 때문에 이 두 언어로 작성된
프로그램은 링크시에 오류가 발생한다.
*함수를 C 컴파일러의 이름 규칙에 따라 컴파일 하도록 C++ 컴파일러에게 지시하기 위해
extern "C"를 사용한다. 예를 들어, int f(int x, int y) 함수가 C 소스 파일에 작성되어 있으면,
C++ 소스 프로그램 내에 다음과 같이 선언한다.
extern "C" int f (int x, int y); |
'프로그래밍 > c++ 명품프로그래밍 ' 카테고리의 다른 글
[c++]파일입출력 summary (0) | 2018.01.06 |
---|---|
[c++] Summary 입출력 시스템 요 (0) | 2018.01.04 |
[c++] 매개 변수 없는 조작자 (0) | 2018.01.04 |
[c++] summary of 가상함수와 추상클래스 (0) | 2018.01.03 |
[c++] 추상클래스, 순수가상함수 (0) | 2018.01.03 |