The goto statement
A goto statement causes your program
to unconditionally transfer control to the statement that is associated
with the label specified on the goto statement.
Because the goto statement can interfere
with the normal sequence of processing, it makes a program more difficult
to read and maintain. Often, a break statement, a continue statement,
or a function call can eliminate the need for a goto statement.
If an active block is exited using a goto statement,
any local variables are destroyed when control is transferred from
that block.
You cannot use a goto statement to jump
over initializations.
A goto statement
is allowed to jump within the scope of a variable length array, but
not past any declarations of objects with variably modified types. 
The following example shows a goto statement
that is used to jump out of a nested loop. This function could be
written without using a goto statement.
CCNRAA6
/**
** This example shows a goto statement that is used to
** jump out of a nested loop.
**/
#include <stdio.h>
void display(int matrix[3][3]);
int main(void)
{
int matrix[3][3]= {1,2,3,4,5,2,8,9,10};
display(matrix);
return(0);
}
void display(int matrix[3][3])
{
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
if ( (matrix[i][j] < 1) || (matrix[i][j] > 6) )
goto out_of_bounds;
printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
}
return;
out_of_bounds: printf("number must be 1 through 6\n");
}Computed goto statement (IBM extension)
A
computed goto is a goto statement
for which the target is a label from the same function. The address
of the label is a constant of type void*, and is
obtained by applying the unary label value operator && to
the label. The target of a computed goto is known at run time, and
all computed goto statements from the same function will have the
same targets. The language feature is an extension to C99 and C++, implemented to facilitate porting programs
developed with GNU C.
