>백엔드 개발 >C++ >C에서 0으로 나누기 오류를 올바르게 처리하는 방법은 무엇입니까?

C에서 0으로 나누기 오류를 올바르게 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-11 20:29:11938검색

How to Properly Handle Divide-by-Zero Errors in C  ?

0으로 나누기 예외 잡기

C에서 0으로 나누려고 할 때 컴파일러나 런타임에서 자동으로 예외가 발생하지 않습니다. . 동작이 정의되지 않았습니다. 즉, 예외나 기타 예측할 수 없는 결과가 발생할 수 있습니다.

제공된 코드 조각에서:

int i = 0;

cin >> i;

try {
    i = 5/i;
}
catch (std::logic_error e) {

    cerr << e.what();
}

코드는 분할을 시도할 때 어떤 예외도 포착하지 않습니다. 0으로 나누는 정수는 표준 C에서 예외로 간주되지 않기 때문에 0으로 나눕니다.

이를 처리하려면 0으로 나누기 조건을 수동으로 확인해야 합니다. 그에 따라 예외를 발생시킵니다. C 표준은 0으로 나누기에 대한 예외를 명시적으로 정의하지 않으므로 다음과 같은 예외를 발생하도록 선택할 수 있습니다.

  • std::overflow_error: 다음과 같은 경우 오버플로가 발생할 수 있습니다. IEEE754 부동 소수점은 0으로 나누기 위해 무한대를 생성합니다.
  • std::domain_error: As 이는 입력 값(예: 분모 0)에 문제가 있음을 나타냅니다.

다음은 0으로 나누기 예외 발생을 보여 주는 수정된 코드 조각입니다.

int intDivEx(int numerator, int denominator) {
    if (denominator == 0)
        throw std::overflow_error("Divide by zero exception");
    return numerator / denominator;
}

try {
    i = intDivEx(5, 0);  // Will throw an overflow_error exception
} catch (std::overflow_error &amp;e) {
    cerr << e.what() << endl;
}

이 예에서는 , intDivEx 함수는 0으로 나누기를 확인하고 발견되면 std::overflow_error 예외를 발생시킵니다. 이를 통해 코드에서 예외를 처리할 수 있습니다.

위 내용은 C에서 0으로 나누기 오류를 올바르게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.