Normally they'd be used to constrain scope of a variable, but in with your example Aux_U16 = 16;
no new variable is defined, so there must be a pre-existing variable named Aux_16
, and beyond the end of the block it will continue to have whatever value it was last set to within the block.
Limiting the scope allows you to create, for example, a new variable named i
, without needing to think about the state of any i
outside of that block -- unfortunately, as in the example you gave, the compiler wouldn't notice the difference between definition and assignment, and you could end up corrupting a variable you thought you had protected.
The other common reason to find things that way is simply cut-and-paste. There's nothing wrong with free-standing blocks like this, and sometimes people just forget to delete the leftovers. Or they might have had temporary variables in there until they edited the code and they went away. Or they might mean it as a note to themselves that the code inside the block belongs together.