>백엔드 개발 >C++ >C가 정수 0으로 나누기에 대해 예외를 발생시키지 않는 이유는 무엇입니까?

C가 정수 0으로 나누기에 대해 예외를 발생시키지 않는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-25 08:03:14127검색

Why Doesn't C   Throw an Exception for Integer Divide-by-Zero?

0으로 나누기 예외 잡기

try/catch 블록을 사용하여 예외를 잡으려고 시도했지만 다음 코드는 설명할 수 없을 정도로 예외를 우회합니다. 0으로 나눌 때 예외:

int i = 0;

cin >> i; // input validation not present

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

    cerr << e.what();
}

예외 C에서 처리

기대와는 달리 0으로 정수 나누기는 표준 C에서 기본 제공 예외가 아닙니다. 이는 0으로 부동 소수점 나누기/나머지의 경우에도 마찬가지입니다. 단, 이 경우 NaN/Inf와 같은 특정 유리수 값이 발생할 수 있습니다.

ISO C 20 표준에 정의된 예외 목록에는 다음이 포함됩니다.

logic_error
domain_error
invalid_argument
length_error
out_of_range
runtime_error
range_error
overflow_error
underflow_error

overflow_error 또는 domain_error를 사용하여 0으로 나누기를 표시하는 인수를 만들 수 있지만 표준에서는 해당 동작이 다음과 같은 경우 정의되지 않았다고 명시적으로 명시합니다.

사용자 정의 예외 처리

0으로 나누기 예외가 필요한 경우 수동으로 구현할 수 있습니다. 다음 예에서는 intDivEx 함수를 사용하여 예외 처리를 통해 정수를 나눕니다.

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

이 함수 사용의 출력은 예외가 발생하고 포착되는 것을 보여 주며, 나누기의 경우 원래 변수는 그대로 유지됩니다. -제로:

i = intDivEx(10, 0); // throws exception

i = intDivEx(10, 2); // returns 5

위 내용은 C가 정수 0으로 나누기에 대해 예외를 발생시키지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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