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
//编译选项:无