1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
   | #include <iostream>
#include <stdexcept>
#include <csignal>
 
class FloatingPointException : public std::exception
{
  public:
    FloatingPointException()
    {
      msg = "FloatingPointException";
    }
 
    virtual ~FloatingPointException() throw()
    {
    }
 
    virtual const char * what() const throw()
    {
      return this->msg.c_str();
    }
 
  private:
    std::string msg;
};
 
void floatingPointExceptionHandler(int i)
{
  std::cerr<<"floatingPointExceptionHandler"<<std::endl;
  throw FloatingPointException();
}
 
void f()
{
  try
  {
    int i = 0;
    i = 4/i;
  }
  catch(FloatingPointException & e)
  {
    std::cerr<<e.what()<<"e"<<std::endl;
  }
}
 
int main()
{
  signal(SIGFPE, floatingPointExceptionHandler);
  f();
  return 0;
} | 
Partager