#pragma warning(disable: 4996)
#include <iostream>
#include <cstdio>
 
using std::cout;
using std::endl;
 
 
int divide(double d, double v, double& result)
{
    if (v == 0)
    {
        result = 0;
        return -1;
    }
    result = d / v;
    return 0;
}
 
int errorCode = 0;
double divide(double d, double v)
{
    if (v == 0)
    {
        errorCode = -1;
        return 0;
    }
    errorCode = 0;
    return d / v;
}
 
int main()
{
    {
        // 에러 발생 시 종료
        // 비정상 종료
        //std::abort();
 
        // 종료 코드를 넣은 종료
        //exit(123);
    }
    // 아래의 예외 처리 방법은 예외 처리가 강제 되지 않는다.
    // printf 가 실패했지만 실패한 것에 대한 예외 상황을 처리하지 않고 작성하더라도 눈치채지 못할 수 있다.
    // 따라서 실패 시 실패에 대한 처리를 강제하게 하는 메커니즘이 필요
    {
        freopen("input.txt""r", stdout);
        // 읽기 전용으로 stdout의 파일을 열었으니 해당 파일(input.txt)로 쓰기(출력)을 할 수 없다
        int result = printf("%d\n"10);  // 에러 발생 시 음수
        cout << result << endl;
 
        cout << cout.fail(); // 에러 발생 시 해당 객체에 저장
    }
    {
        double result;
        int errorCode = divide(100, result); // 에러 발생 시 에러 코드
        if (errorCode > 0)
        {
            cout << result << endl;
        }
    }
    {
        double result = divide(100);
        if (errorCode > 0// 전역적으로 사용하는 변수, 멀티 쓰레드에서 문제 발생
        {
 
        }
    }
}
cs

'::public > C++' 카테고리의 다른 글

RAII  (0) 2020.12.14
try catch  (0) 2020.12.14
C 스타일함수 스타일 변환  (0) 2020.12.14
reinterpreter_cast  (0) 2020.12.11
dynamic_cast  (0) 2020.12.11

+ Recent posts