如果我必须调用一个特定的函数,其中正在发生偏差。我们无法修改被调用函数中的任何内容。唯一可以防止的方法是在调用函数时做一些修改。怎么做?
代表:
//calling function
int func(5,1);
//called function
int func(int x,int y)
{
y--;
return(x/y); // here divide by zero will occur, but we cannot do any thing in
// called function
}
如何保持我们的应用程序运行而不是此异常?
答案 0 :(得分:3)
有两种方法可以解决这个问题:
在调用代码中,你应该检查除数。
if(y != 0)
func(x,y);
else
//Some log or error handling
OR
整数除以零不是标准的C ++异常。所以你不能依赖于隐式抛出的异常。特定的编译器可能会将除以0的值除以某种异常(您需要检查编译器文档),如果是这样,您可以捕获该特定异常。但请注意,这不是可移植行为,并不适用于所有编译器。
因此,鉴于上述情况,您可以做的最好的事情就是自己检查错误条件(除数等于零)并明确说明类型std::runtime_error
的异常。
无论哪种情况,您的代码都应该适当地记录行为。在第一种情况下,您的代码应该记录有效的受支持值,而在第二种情况下,它应该指定可以抛出的异常。
答案 1 :(得分:1)
在Linux下,您可以为SIGFPE安装信号处理函数(带信号(2)),并在其中抛出异常,然后使用-fnon-call-exceptions编译代码。
一旦完成,除以零将导致抛出异常。
对于Windows,这里提到了一些内容:Dealing with Floating Point exceptions
答案 2 :(得分:0)
一般来说,你可以:
答案 3 :(得分:0)
您可以在调用函数中执行此操作: -
if(i == 0)
cout<<" info::i is equal to zero";
else
func(5,i);