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.
Oliver Wong - 25 Oct 2006 21:05 GMT
> Hi,
>
[quoted text clipped - 29 lines]
> 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
Bart - 26 Oct 2006 12:43 GMT
<snip>
> 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.