Parksie gave you what you need to use setjmp() -- to get in real trouble.

Basically, if you must jump, stay within a function.

Code:
int pointless(int a){
     int retval=0;
     if (a==0) goto goback;
     retval=a + 5;
goback:
     return retval;
In VB you are forced to use 'on error goto' constructs.
Try really hard not to use 'goto' in C or C++. Period.
use
Code:
if() {
}else{
}
In C or C++ goto is a great way to write code that gets you in trouble. The major problem is that after you edit code laced with goto's you cannot be sure what the logic path will actually be during runtime. This isn't fluff - if you have 4000 lines of code with
100 goto's you can have in excess of 1,000,000 code logic paths.
If you remove them, the code path possibilities drop dramatically.

setjmp() is useful in recovering from errors in an algorithm like a recursive descent parser in a compiler, which was original intention of setjmp().

setjmp() stores the current stack frame, then pushes it as well and remembering it's address in the stack. Calling longjmp() destroys all of the stack contents (pops the stack) up to that remembered point. That way, it's like a time warp. It is meant for graceful error recovery for certain algorithms, not really as a goto replacement.