Udostępnij za pośrednictwem


extern — specyfikator klasy magazynowania

Zmienna zadeklarowana za extern pomocą specyfikatora klasy magazynu jest odwołaniem do zmiennej o tej samej nazwie zdefiniowanej w innym pliku źródłowym. Służy do uwidaczniania definicji zmiennej na poziomie zewnętrznym. Zmienna zadeklarowana jako extern nie ma przydzielonego magazynu dla siebie; jest to tylko nazwa.

Przykład

Ten przykład ilustruje deklaracje na poziomie wewnętrznym i zewnętrznym:


// Source1.c

int i = 1;

// Source2. c

#include <stdio.h>

// Refers to the i that is defined in Source1.c:
extern int i;

void func(void);

int main()
{
    // Prints 1:
    printf_s("%d\n", i);
    func();
    return;
}

void func(void)
{
    // Address of global i assigned to pointer variable:
    static int *external_i = &i;

    // This definition of i hides the global i in Source.c:
    int i = 16;

    // Prints 16, 1:
    printf_s("%d\n%d\n", i, *external_i);
}

W tym przykładzie zmienna i jest definiowana w pliku Source1.c z początkową wartością 1. Deklaracja extern w pliku Source2.c sprawia, że element "i" jest widoczny w tym pliku.

func W funkcji adres zmiennej i globalnej jest używany do inicjowania zmiennej staticexternal_iwskaźnika . Działa to, ponieważ zmienna globalna ma static okres istnienia, co oznacza, że jego adres nie zmienia się podczas wykonywania programu. Następnie zmienna i jest definiowana w zakresie func jako zmiennej lokalnej z wartością początkową 16. Ta definicja nie ma wpływu na wartość na poziomie izewnętrznym , która jest ukryta przez użycie jej nazwy dla zmiennej lokalnej. Wartość globalnej i jest teraz dostępna tylko za pośrednictwem wskaźnika external_i.

Zobacz też

Specyfikatory klasy magazynu dla deklaracji Internal-Level