예외 처리와 링킹

pjh5365·2023년 6월 15일
0

[C++]

목록 보기
6/6
post-thumbnail

예외

예외란 실행 중 프로그램의 오작동이나 결과에 영향을 미치는 예상치 못한 상황 발생을 말한다. C++ 에서 예외를 탐지하고 예외에 대처하는 코드는 try-throw-catch 구조로 작성한다.

예시

try{
    예외발견 {
        throw XXX;  //예외 발생을 알림 XXX는 예외 값
    }
}
catch(처리할 예외 파라미터 선언) {
    예외 처리문
}

예외가 발생할 소지가 있는 문장들은 try 블록으로 묶어 예외를 처리할 catch블록을 바로 연결하여 사용한다. 또한 하나의 try 블록에 여러 개의 catch 블록을 선언할 수 있다. try 블록 내에는 예외 발생을 탐지하는 코드를 작성해야 하며 예외가 탐지되면 throw 문을 실행하여 예외 발생을 알린다. throw 가 던진 예외는 연결된 catch 블록에서 처리되며 예외 값의 타입과 일치하는 catch 블록이 실행된다.

예외처리 예시

#include <iostream>
using namespace std;

int main() {
    int n, sum , avg;
    while(1) {
        cout << "합을 입력하세요 >> ";
        cin >> sum;
        cout << "인원 수를 입력하세요 >> ";
        cin >> n;

        try {
            if(n <= 0)
                throw n;    //음수가 들어오면 음수가 들어온 값을 던짐
            else
                avg = sum / n;
        }
        catch(int x) {
            cout << "예외 발생 " << x << "의 값으로 나눌 수 없음" << endl;
            avg = 0;
            cout << endl;
            continue;
        }
        cout << "평균 : " << avg << endl;
    }
}

C++ 코드와 C 코드의 링킹

C 컴파일러의 이름 규칙은 함수 이름 앞에 _ 를 붙여 사용하지만 C++ 컴파일러의 이름 규칙은 C 와 달리 함수의 매개 변수 개수와 타입, 리턴 타입 등을 참조하여 복잡한 기호를 붙여 만들기 때문에 C++ 프로그램에서 C 함수를 호출한다면 이름이 맞지 않아 링크 오류가 발생한다. 이를 방지하기 위해 C++에서 함수의 이름 앞에 extern "C" 키워드를 붙여 작성한다. 이 키워드를 넣어 함수를 작성하면 C 이름 규칙을 따라 컴파일 한다.

0개의 댓글