What are labels in Cpp and can you give some examples?
Labels are used to label the statements that follow for use with
goto statements. Labels are user-defined names that follow standard
naming conventions, starting in column 1 and ending with a colon
(:). They are usually placed on a line of their own but must appear
in the same function that contains the goto. Note that a label that
has no statements following (the label is the last statement in the
function), it must include a semi-colon (;) after the colon (an
empty statement).
Although many programmers frown upon the use of goto, it is
really no different to using return, break or continue to interrupt
the normal program flow within a function. However, it's fair to
say goto statements are often used quite inappropriately, producing
"spaghetti code" that is really quite difficult to follow.
In many cases there will be a better alternative to using a
goto, however the following example illustrates a correct usage for
goto, breaking out of nested compound statements. The functions
UseBreak() and UseGoto() both produce exactly the same results, but
the goto version is easier to follow as the conditional expression
only needs to be evaluated once. Evaluating one goto rather than
two breaks is also more efficient.
#include <iostream>
using namespace std;
void UseBreak()
{
cout<<"UseBreak() executing..."<<endl;
int i, j;
for(i=0;i<10;++i)
{
cout<<"Outer loop executing. i="<<i<<endl;
for(j=0;j<2;j++)
{
cout<<"\tInner loop executing.
j="<<j<<endl;
if(i==3)
break; // break out of inner loop.
}
if(i==3)
break; // break out of outer loop.
cout<<"\tInner loop finished."<<endl;
}
cout<<"Outer loop finished."<<endl<<endl;
}
void UseGoto()
{
cout<<"UseGoto() executing..."<<endl;
int i, j;
for(i=0;i<10;++i)
{
cout<<"Outer loop executing. i="<<i<<endl;
for(j=0;j<2;j++)
{
cout<<"\tInner loop executing.
j="<<j<<endl;
if(i==3)
goto stop; // jump out of both loops.
}
cout<<"\tInner loop finished."<<endl;
}
stop:
cout<<"Outer loop finished."<<endl<<endl;
}
int main()
{
UseBreak();
UseGoto();
return(0);
}
Output:
UseBreak() executing...
Outer loop executing. i=0
Inner loop executing. j=0
Inner loop executing. j=1
Inner loop finished.
Outer loop executing. i=1
Inner loop executing. j=0
Inner loop executing. j=1
Inner loop finished.
Outer loop executing. i=2
Inner loop executing. j=0
Inner loop executing. j=1
Inner loop finished.
Outer loop executing. i=3
Inner loop executing. j=0
Outer loop finished.
UseGoto() executing...
Outer loop executing. i=0
Inner loop executing. j=0
Inner loop executing. j=1
Inner loop finished.
Outer loop executing. i=1
Inner loop executing. j=0
Inner loop executing. j=1
Inner loop finished.
Outer loop executing. i=2
Inner loop executing. j=0
Inner loop executing. j=1
Inner loop finished.
Outer loop executing. i=3
Inner loop executing. j=0
Outer loop finished.