Question regarding using label for break, continue flow control

S

Shawn

Hi,

I need to use break and continue to transfer my program flow. I hope to
use labels to explicitly state where the control flow will be, as
suggested by somebody in the newsgroup. I have noticed something strange:

block1:
{ //compiler doesn't allow "{" here
for (int i = 0; ..)
{
if (conditionSatisfied) continue block1; //this will move control to
the beginning of for loop, for loop will continue to run

} //end of for loop
} //compiler doesn't allow "}" here

block2:
{ //now compiler allows "{" here
...//more code
for (int i = 0; ..)
{
if (conditionSatisfied) break block2; //this will move control to the
end of block2 immediately
}
...//mode code

} //end of block2, break block2 will bring control to the line below
this line

My questions:
1) Why block1 cannot have a pair of {} while block2 can?
2) Is my understanding of the control flow using break or continue
correct in this demo?

Thank you very much.
 
O

Oliver Wong

Shawn said:
Hi,

I need to use break and continue to transfer my program flow. I hope to
use labels to explicitly state where the control flow will be, as
suggested by somebody in the newsgroup. I have noticed something strange:

block1:
{ //compiler doesn't allow "{" here
for (int i = 0; ..)
{
if (conditionSatisfied) continue block1; //this will move control to the
beginning of for loop, for loop will continue to run

} //end of for loop
} //compiler doesn't allow "}" here

block2:
{ //now compiler allows "{" here
...//more code
for (int i = 0; ..)
{
if (conditionSatisfied) break block2; //this will move control to the end
of block2 immediately
}
...//mode code

} //end of block2, break block2 will bring control to the line below this
line

My questions:
1) Why block1 cannot have a pair of {} while block2 can?
2) Is my understanding of the control flow using break or continue correct
in this demo?

"continue" only makes sense when you're iterating over something (e.g. a
for loop, do loop or while loop). Did you try applying the "block1:" label
directly onto the forloop, rather than onto a block containing the for-loop?
Alternatively, you could use "continue" without a label at all, and the
compiler will infer you mean that you want to continue the inner-most
iteration.

(Your understanding of "break" seems to be correct).

- Oliver
 
B

Bart

Shawn wrote:
My questions:
1) Why block1 cannot have a pair of {} while block2 can?

The block itself is correct. You can't 'continue' to block1 because
it's not a loop block.
2) Is my understanding of the control flow using break or continue
correct in this demo?

I'm not sure why you're doing all this. You seem to be trying to jump
around the code in a "goto" fashion instead of structuring it
correctly.

<evil>
You could wrap block1 in a do..while(false) loop but this is similar to
using exceptions for jumping to a different part of the code. Don't do
it!
</evil>

Regards,
Bart.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top