C Language Block Scope


Esempio

Un identificatore ha scope di blocco se la relativa dichiarazione appare all'interno di un blocco (si applica la dichiarazione dei parametri nella definizione della funzione). L'oscilloscopio termina alla fine del blocco corrispondente.

Nessuna entità diversa con lo stesso identificatore può avere lo stesso ambito, ma gli ambiti possono sovrapporsi. In caso di ambiti sovrapposti, l'unico visibile è quello dichiarato nello scope più interno.

#include <stdio.h>

void test(int bar)                   // bar has scope test function block
{
    int foo = 5;                     // foo has scope test function block
    {
        int bar = 10;                // bar has scope inner block, this overlaps with previous test:bar declaration, and it hides test:bar
        printf("%d %d\n", foo, bar); // 5 10
    }                                // end of scope for inner bar
    printf("%d %d\n", foo, bar);     // 5 5, here bar is test:bar
}                                    // end of scope for test:foo and test:bar

int main(void)
{
    int foo = 3;         // foo has scope main function block

    printf("%d\n", foo); // 3
    test(5);
    printf("%d\n", foo); // 3
    return 0;
}                        // end of scope for main:foo