65.9K
CodeProject is changing. Read more.
Home

The goto-less goto!

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0 vote)

Jan 31, 2011

CPOL
viewsIcon

4582

For Cbool bFailed = true;// foreverfor(;;) { // do something here. if(condition1) { // exit the loop (goto) break; } // do something here. // .... // In case you want to goto to the top instead of exit. if(condition2) { // jump to top of the...

For C
bool bFailed = true;

// forever
for(;;) {
  // do something here.

  if(condition1) {
    // exit the loop (goto)
    break;
  }

  // do something here.
  // ....

  // In case you want to goto to the top instead of exit.
  if(condition2) {
    // jump to top of the loop. (goto)
    continue;
  }

  // Success.
  bFailed = false;
  // This break is necessary to avoid an infinite loop.
  break;
} // forever

if(bFailed) {
  // do your error cleanup here. 
}

// do your unconditional cleanup here.
For C++
bool bFailed = true;

// In case of an exception.
try {
  // forever
  for(;;) {
    // do something here.
  
    if(condition1) {
      // exit the loop (goto)
      break;
    }
  
    // do something here.
    // ....
  
    // In case you want to goto to the top instead of exit.
    if(condition2) {
      // jump to top of the loop. (goto)
      continue;
    }
  
    // Success.
    bFailed = false;
    // This break is necessary to avoid an infinite loop.
    break;
  } // forever
} catch(...) {
  // this assumes you want to catch all.
}

if(bFailed) {
  // do your error cleanup here. 
}

// do your unconditional cleanup here.