| NAME |
| block |
| |
| DESCRIPTION |
| A block is a special statment, that begins with '{', contains |
| a list of statements, and ends with '}'. |
| |
| The block may define local variables. If for a variable no |
| initialisation is given, the variable is initialised to 0 every |
| time the block is entered. Otherwise, the initialisation |
| expression is evaluated and its result assigned to the variable |
| everytime the block is entered. |
| |
| Example definitions are: |
| |
| int i; |
| int j = 3; |
| int k = 3 * j, l; |
| |
| Here, i and l are both initialised to 0; j is initialised |
| to 3, and k is initialised to 9 (3 * j). |
| |
| Local variables defined in a block are visible only until the |
| end of the block. Definitions in an inner block hide definitions in |
| outer blocks. |
| |
| HISTORY |
| Up to 3.2.7 local variables were visible (from their point of |
| definition) in the whole function. That is, code like |
| |
| do { |
| int res; |
| |
| res = ... |
| } while (res == 5); |
| write(res); |
| |
| was perfectly legal. It is no longer, as 'res' ceases to exist |
| with the closing '}' of the while(). |
| |
| Up to 3.5.0 you could get this old behaviour back with the |
| #pragma no_local_scopes and switch it off again with |
| #pragma local_scopes. |
| |
| Since 3.5.0 it is not possible to disable the local scope behaviour. |
| |
| Up to 3.2.8, local variables could not be initialised in their |
| definition. |