异常捕获try和__try

try和__try的区别就是,try是应用于C++的,而__try是应用于C语言的(仅仅在Windows平台有效,Linux没有这个操作符)。所以说在C语言中使用__try是没问题的,但是如果用try的话,则会抛出没有定义标识符的错误。

而且样子也不仅仅是加了两个下划线那么简单。

一个是:

try
{
    /* code */
}
catch(/* error class */)
{
    /* code */
}

另一个是:

__try
{
    /* code */
}
__except(/* error function */)
{
    /* code */
}

__try{}__except的原理和try{}catch相差比较大,try{}后面可以接多个catch,而__try{}后面是能接一个__except,由于C语言没有类这个概念,所以__except(){}实际上就相当于if(){},如果里面的值为0的话则不执行{}里面的代码,为非0则执行。一般来说__except()里面一般是一个判断是否为当前错误的函数。如果是则返回1,执行{}代码,不是则抛给系统的默认异常处理机制处理(通常,会弹出一个错误对话框,然后强制关闭程序)。

下面我举个例子:

#include <stdio.h>

int divide_by_zero_error(int divisor)
{
    if (divisor == 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main(int argc, char const *argv[])
{
    int x = 1;
    int y = 0;
    int result;

    __try
    {
        result = x / y;
        printf("%d / %d = %d\n", x, y, result);
    }
    __except (divide_by_zero_error(y))
    {
        fprintf(stderr, "错误:除数为0 !\n");
    }

    return 0;
}

//测试环境:Win10
//编译器:vs2017 x86命令工具 cl.exe
//编译选项:无

说点什么

avatar
  Subscribe  
提醒