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 static
external_i
wskaź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 i
zewnę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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla