Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

do {...} while(false)

Tags:

c++

People also ask

What is the point of do while false?

The do{}while(false) hides this from the compiler, and is accepted by it as an indication that you really want to do nothing here.

What happens if a while loop is false?

The while loop condition is checked again. If the condition evaluates to True again, the sequence of statements runs again and the process is repeated. When the condition evaluates to False , the loop stops and the program continues beyond the loop.

What is the meaning of while false?

while loops use only Boolean expression and when it is true. So when it gets true it'll execute until it gets false. while(false) means the condition is false which will end the loop. while(True) means the condition is True which will continue the loop.

How do you do while false in Python?

If you want 'while false' functionality, you need not . Try while not fn: instead. Show activity on this post. The condition is the loop is actually a "pre-" condition (as opposed to post-condition "do-while" loop in, say, C).


You can break out of do{...}while(false).


A lot of people point out that it's often used with break as an awkward way of writing "goto". That's probably true if it's written directly in the function.

In a macro, OTOH, do { something; } while (false) is a convenient way to FORCE a semicolon after the macro invocation, absolutely no other token is allowed to follow.

And another possibility is that there either once was a loop there or iteration is anticipated to be added in the future (e.g. in test-driven development, iteration wasn't needed to pass the tests, but logically it would make sense to loop there if the function needed to be somewhat more general than currently required)


The break as goto is probably the answer, but I will put forward one other idea.

Maybe he wanted to have a locally defined variables and used this construct to get a new scope.

Remember while recent C++ allows for {...} anywhere, this was not always the case.


I've seen it used as a useful pattern when there are many potential exit points for the function, but the same cleanup code is always required regardless of how the function exits.

It can make a tiresome if/else-if tree a lot easier to read, by just having to break whenever an exit point is reached, with the rest of the logic inline afterwards.

This pattern is also useful in languages that don't have a goto statement. Perhaps that's where the original programmer learnt the pattern.