C++ 프로그래밍에서 정수를 0으로 나누면 정의되지 않은 동작(undefined behavior)이 발생하거나 프로그램이 비정상 종료될 수 있습니다. 이를 방지하려면 예외 처리(Exception Handling) 메커니즘을 활용해야 합니다. 다음은 try-catch 블록을 사용하여 0으로 나누기 오류를 감지하고 처리하는 예제입니다.
예제 코드
#include <iostream>
using namespace std;
int display(int x, int y) {
if( y == 0 ) {
throw "Division by zero condition!";
}
return (x/y);
}
int main () {
int a = 50;
int b = 0;
int c = 0;
try {
c = display(a, b);
cout << c << endl;
} catch (const char* msg) {
cerr << msg << endl;
}
return 0;
}실행 결과
Division by zero condition!
코드 분석
위 프로그램에서는 두 개의 정수 매개변수 x와 y를 받는 display() 함수가 정의되어 있습니다. 이 함수는 x를 y로 나눈 결과를 반환하며, 나누는 값(y)이 0인 경우 throw 문을 통해 예외를 발생시킵니다.
int display(int x, int y) {
if( y == 0 ) {
throw "Division by zero condition!";
}
return (x/y);
}main() 함수에서는 try 블록 안에서 display() 함수를 호출합니다. 만약 y가 0이라면 throw 문에 의해 예외가 발생하고, 프로그램의 흐름은 즉시 catch 블록으로 이동합니다. catch 블록은 발생한 예외 메시지(const char* 타입)를 전달받아 cerr을 통해 에러 메시지를 화면에 출력합니다.
try {
c = display(a, b);
cout << c << endl;
} catch (const char* msg) {
cerr << msg << endl;
}핵심 포인트
- throw: 특정 조건에서 예외를 발생시키는 키워드입니다.
- try: 예외가 발생할 가능성이 있는 코드를 감싸는 블록입니다.
- catch: 발생한 예외를 잡아 적절하게 처리하는 블록입니다.
참고로 문자열 리터럴(const char*) 대신 std::runtime_error와 같은 표준 예외 클래스를 사용하면 더욱 안전하고 체계적인 예외 처리를 구현할 수 있습니다. 이러한 패턴은 파일 입출력, 네트워크 통신 등 다양한 오류 상황을 처리할 때도 동일하게 활용됩니다.