Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

The goto-less goto!

0.00/5 (No votes)
31 Jan 2011CPOL 4.5K  
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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)