주어진 코드 조각에서 0으로 나누기는 예외를 트리거하지 않습니다. 이것이 왜 해당되며 이러한 오류에 대해 예외가 발생하는지 어떻게 확인할 수 있습니까?
다른 일반적인 런타임 오류와 달리 0으로 정수 나누기는 표준 C에서 예외가 아닙니다. 부동 소수점 나누기 또는 나머지 연산도 본질적으로 예외를 발생시키지 않습니다. 대신, 두 번째 피연산자가 0일 때 이러한 연산은 정의되지 않은 동작을 갖습니다. 이는 예외 발생, 프로그램 충돌 또는 프로그램 범위 밖의 작업 수행 등 시스템이 잠재적으로 예측할 수 없는 동작을 수행할 수 있음을 의미합니다.
표준 C에서는 처리하지 않기 때문에 예외로 0으로 나누는 경우 개발자는 이러한 조건을 수동으로 확인하고 필요한 경우 사용자 지정 예외를 발생시켜야 합니다. 예를 들어, Overflow_error 또는 domain_error를 발생시켜 0으로 나누기 오류를 나타낼 수 있습니다.
다음 수정된 코드 조각은 사용자 정의 intDivEx를 사용하여 0으로 나누기 예외를 포착하는 방법을 보여줍니다. 기능:
#include <iostream> #include <stdexcept> // Integer division, catching divide by zero. inline int intDivEx(int numerator, int denominator) { if (denominator == 0) throw std::overflow_error("Divide by zero exception"); return numerator / denominator; } int main() { int i = 42; try { i = intDivEx(10, 0); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; try { i = intDivEx(10, 2); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; return 0; }
Divide by zero exception -> 42 5
이것 코드는 i의 원래 값을 유지하면서 0으로 나누기 예외를 올바르게 던지고 포착합니다.
위 내용은 C가 0으로 정수 나누기에 대해 예외를 발생시키지 않는 이유는 무엇이며 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!