C++ goto Statement



The goto Statement

A goto statement provides an unconditional jump from the goto to a labeled statement in the same function.

NOTE − Use of goto statement is highly discouraged because it makes difficult to trace the control flow of a program, making the program hard to understand and hard to modify. Any program that uses a goto can be rewritten so that it doesn't need the goto.

The goto statement in C++ is a kind of control flow construct that lets the program jump directly to a given statement within the same function. The goto statement transfers control to a given label in the function. A label is defined with an identifier followed by a colon (:).

Syntax

The syntax of a goto statement in C++ is given as follow −

 goto label; .. . label: statement; 

Where, label is an identifier that identifies a labeled statement.
A labeled statement is any statement that is preceded by an identifier followed by a colon (:).

Flow Diagram

Here is the following flow diagram, showcasing the working of goto statement-

C++ goto statement

Example

Here is the following example code:

 #include <iostream> using namespace std; int main () { // Local variable declaration: int a = 10; // do loop execution LOOP:do { if( a == 15) { // skip the iteration. a = a + 1; goto LOOP; } cout << "value of a: " << a << endl; a = a + 1; } while( a < 20 ); return 0; } 

Output

When the above code is compiled and executed, it produces the following result −

 value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 16 value of a: 17 value of a: 18 value of a: 19 

One good use of goto is to exit from a deeply nested routine. For example, consider the following code fragment −

 for(...) { for(...) { while(...) { if(...) goto stop; . . . } } } stop: cout << "Error in program.\n"; 

Eliminating the goto would force a number of additional tests to be performed. A simple break statement would not work here, because it would only cause the program to exit from the innermost loop.

When to Use goto?

The goto statement generally is considered unsatisfactory to modern programming style because it causes code to become unstructured. However, it might be useful in the following cases:

  • Breaking out of deeply nested loops.
  • Handling errors or exceptional cases in legacy code.

Example: Breaking Out of Nested Loops

 #include <iostream> using namespace std; int main() { for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { if (i == 1 && j == 1) { goto exitLoops; } cout << "i: " << i << ", j: " << j << endl; } } exitLoops: cout << "Exited the nested loops!" << endl; return 0; } 

Output

i: 0, j: 0 i: 0, j: 1 i: 0, j: 2 i: 1, j: 0 Exited the nested loops! 
Advertisements
close