注册 登录
编程论坛 C++教室

_CxxThrowException 是什么?初学者

gwcome 发布于 2013-03-23 10:34, 1177 次点击
00131168  jmp         _CxxThrowException (1325D6h)

反汇编调试的时候碰到的??
我调试的是一个try块,想要了解try,throw,catch这三个之间的关系??程序内部是周末运行的?
它们有什么格式??
是不是
try{不确定的代码}
catch{捕捉错误信息}
throw又是什么时候用,又运用在哪里??
我调试的代码也顺便贴出
程序代码:
#include <iostream>
#include <climits>

unsigned long returnFactorial(unsigned short num) throw (const char *);

int main()
{
    unsigned short num = 0;

    std::cout << "请输入一个整数: ";
    while( !(std::cin>>num) || (num<1) )
    {
        std::cin.clear();             // 清除状态
        std::cin.ignore(100, '\n');   // 清除缓冲区
        std::cout << "请输入一个整数:";
    }
    std::cin.ignore(100, '\n');

    try
    {
        unsigned long factorial = returnFactorial(num);
        std::cout << num << "的阶乘值是: " << factorial;
    }
    catch(const char *e)
    {
        std::cout << e;
    }

    return 0;
}

unsigned long returnFactorial(unsigned short num) throw (const char *)
{
    unsigned long sum = 1;
    unsigned long max = ULONG_MAX;

    for( int i=1; i <= num; i++ )
    {
        sum *= i;
        max /= i;
    }

    if( max < 1 )
    {
        throw "悲催。。。该基数太大,无法在该计算机计算求出阶乘值。\n";
    }
    else
    {
        return sum;
    }
}
6 回复
#2
yuccn2013-03-23 10:38
有本叫c++ 反汇编的,对这个讲的很细
#3
gwcome2013-03-23 10:48
回复 2楼 yuccn
论坛有下吗
#4
rjsp2013-03-23 10:51
你的代码挺好的呀,不知道你想问什么
不过,“catch{捕捉错误信息}”应当改为“catch{捕捉异常信息}”,异常 和 错误 是无一丝一毫关系的两个独立概念。在C++中,异常属于逻辑方面的概念,错误属于运行方面的概念。
#5
gwcome2013-03-23 11:01
回复 4楼 rjsp
不是我写的。。。我想了解内部是如何运行的
#6
gwcome2013-03-23 11:05
回复 4楼 rjsp
warning C4290:忽略 C++ 异常规范,但指示函数不是 __declspec(nothrow)
这个warning是什么意思  还请赐教
#7
rjsp2013-03-23 11:14
回复 6楼 gwcome
VC的问题,VC不支持“异常规格说明”
不过,这也不是什么问题,因为“异常规格说明”本身就即复杂又没用,听说新标准要废了它
1