1)      goto

goto 只能在一个函数内跳转。建议少用,使得程序维护起来容易出错;但是,在有多个循环情况下跳转,有时用goto可以使得问题变得简单。

 

 

一个例子

 

class A

{

public:

A(){}

~A(){}
};

 

           int main()

{

{

                A a;

                goto Label1;

}

Label1:

cout<<”end”<<endl;

return 0;
}     

 

2)      setjmp/longjmp

非局部跳转(nonlocal goto),可用于在不同函数内跳转,但是不会调用析构函数(vc++是会的,但是别的编译器可能不会,不具备移植性)。使用步骤如下:

l       include <setjmp.h>

l       jmp_buf JumpBuffer

//跳转的位置结构

l       setjmp(JumpBuffer)

保存当前的位置,将来跳转到这里

l       longjmp(JumpBuffer, 整数)

这个整数会成为setjmp的返回值。

 

         一个例子

 

         jmp_buffer jmpbuf;  //用以保存处理器相关的状态信息(栈信息等)

 

           void Func()

{

cout << “ get in ” <<endl;

A a;

longjmp(jmpbuf, 1);

cout << “ never get here ”<<endl;
}

 

           int main()

{

cout << “ get in main ” <<endl;

if( setjmp (jmpbuf ) == 0 )

{

cout<<”set lable”<<endl;

Func();
}

                else //1

{

        cout<<” jmp to here”<<endl;

}

}

posted on 2014-11-11 22:31  风云逸  阅读(73)  评论(0)    收藏  举报