«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ITGenerations

[c++] summary 예외처리와 C언어와의 링크 지정 본문

프로그래밍/c++ 명품프로그래밍

[c++] summary 예외처리와 C언어와의 링크 지정

ITGenerations 2018. 1. 6. 21:31

실행 오류와 오류처리


*컴파일이 잘 된 프로그램도 예상치 못한 입력 값이나 논리적 실수로 실행 중에 오류가 발생할 수 있으며, 

이 때 프로그램이 비정상 종료된다.

*실행 중에 발생하는 오류로 프로그램이 비정상 종료되는 것을 막기 위해, 실행 오류의 발생을 탐지하고 이에 

대처하는 코드가 작성되어야 한다. 





예외와 예외처리


*예외(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);