double MyFunction(int a, int b)
{
return a / b; //논리오류 정수만 결과로 나옴
return (double)a/b; //논리오류 제거
}
int main()
{
int a=10;
int b=9;
std::cout << MyFunction(a, b);
}
double MyFunction(int a, int b)
{
return (double)a / b;
}
int main()
{
int 3;
int 0;
std::cin >> a >> b;
std::cout << MyFunction(a, b);
}
//결과 : inf (무한대) 0으로 나누기 때문
//b는 0이 되면 안되도록 처리가 필요
//1번:함수를 부르는(caller)에서 처리
double MyFunction(int a, int b)
{
return (double)a / b;
}
int main()
{
int 3;
int 0;
std::cin >> a >> b;
if(b==0)
{
std::cout<<"0으로 나누기 불가"
std::cerr<<"캐릭터를 에러 스트림으로 내보냄"
}
else
{
std::cout << MyFunction(a, b);
}
}
//2번:함수에서 처리(callee) : 이 방법이 깔끔함
double MyFunction(int a, int b)
{
if(b==0)
{
std::cerr<<"divide by zero";
return infinity;
}
return (double)a / b;
}
int main()
{
int 3;
int 0;
std::cin >> a >> b;
std::cout << MyFunction(a, b);
}
사용자가 기대하는 작업 이외의 것을 시도할 때
에러를 처리하는 하나의 방법이기도함
error 발생을 감지하면 exception을 만들고 exception을 처리함
exception - throw 예외를 던지고
try 시도해본다음
catch 예외가 잡히면 처리
double MyFunction(int a, int b)
{
if (b==0) //error detect
{
throw std::logic_error("divide by zero");
//예외를 만듬(exception)
}
return (double)a / b;
}
int main()
{
int a;
int b;
std::cin >> a >> b;
try
{
std::cout << MyFunction(a, b);
}
catch(std::logic_error)
{
std::cout<<"divide by zero";
}
//exception handling
//아이디 입력
//내용
//인터넷으로 전송
}
catch(...) //말줄임표 : 어떤 예외든 다 때려박음
{
std::cerr<<"unexpected exception";
}
//프로그램의 흐름이 강제적으로 변경됨 예외사항이라면 바로 catch부분으로 옴
CASSERT 기능 (VISUAL STUDIO)
--
#include <iostream>
#include <cassert> //ASSERT라는 기능은 디버그에서만 작동함
int main()
{
int* p = new int;
assert(p!=nullptr);
assert(p);
//괄호안을 참으로 단언하는 코드
//괄호안이 거짓으로 되면 error!!
//메모리가 정상적으로 할당되었다면이라는 뜻
int money = 100;
//잔액 확인
//구매 /차감
if (money<0)
{
//안됨
}
assert(money >= 0);
}