Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zmienna zadeklarowana za pomocą extern specyfikatora klasy magazynu to odwołanie 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 zmienna lokalna o wartości początkowej 16. Ta definicja nie ma wpływu na wartość poziomu izewnętrznego , 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 magazynowania dla deklaracji na poziomie wewnętrznym