예외란 실행 중 프로그램의 오작동이나 결과에 영향을 미치는 예상치 못한 상황 발생을 말한다. 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++에서 함수의 이름 앞에 extern "C"
키워드를 붙여 작성한다. 이 키워드를 넣어 함수를 작성하면 C 이름 규칙을 따라 컴파일 한다.