Man block

From LSWiki

Revision as of 15:10, 11 June 2007; Laine (Talk | contribs)
(diff) ←Older revision | Current revision | Newer revision→ (diff)
Jump to: navigation, search

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().

You can get this old behaviour back with the #pragma no_local_scopes. To turn it off again, use #pragma local_scopes.

Up to 3.2.8, local variables could not be initialised in their definition.

Personal tools