Identifiers declared inside a block have block scope, which begins at the identifier’s declaration and ends at the terminating right brace (
}) of the block in which the identifier is declared. Local variables have block scope, as do function parameters. Any block can contain variable declarations. When blocks are nested and an identifier in an outer block has the same name as an identifier in an inner block, the identifier in the outer block is “hidden” until the inner block terminates. The inner block “sees” its own local identifier’s value and not that of the enclosing block’s identically named identifier. Local variables declared
static still have block scope, even though they exist from the time the program begins execution. Storage ...