Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 0으로 나누기 오류를 감지하고 처리하는 방법

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와 같은 표준 예외 클래스를 사용하면 더욱 안전하고 체계적인 예외 처리를 구현할 수 있습니다. 이러한 패턴은 파일 입출력, 네트워크 통신 등 다양한 오류 상황을 처리할 때도 동일하게 활용됩니다.