The goto-less goto!






3.34/5 (23 votes)
The goto-less goto!
You have non-looped, sequenced code, like below:
bool bFailed = true; if(condition1_fails) goto Exit; ... if(condition2_fails) goto Exit; ... ... if(conditionN_fails) goto Exit; bFailed=false; PerformActionOnAllSuccess(); Exit: if(bFailed) DoFailedCleanup(); else DoNormalCleanup()Here is the
goto
-less goto, that you can use:
bool bFailed=true; do { if(condition1_fails) break; ... if(condition2_fails) break; ... ... if(conditionN_fails) break; bFailed = false; PerformActionOnAllSuccess(); } while(false); // Ignore or disable warning at function-level if(bFailed) DoFailedCleanup(); else DoNormalCleanup();It runs a
do-while
loop, which would run only once. As soon as some failed-condition encounters, it exits (break) from loop.