extern – specifikátor třídy úložiště
Proměnná deklarovaná specifikátorem extern
třídy úložiště je odkazem na proměnnou se stejným názvem definovaným v jiném zdrojovém souboru. Slouží k zviditelnění definice proměnné na externí úrovni. Proměnná deklarovaná jako extern
nemá pro sebe přidělené žádné úložiště, jedná se pouze o název.
Příklad
Tento příklad ilustruje deklarace na vnitřní a vnější úrovni:
// 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);
}
V tomto příkladu je proměnná i
definována v souboru Source1.c s počáteční hodnotou 1. Deklarace extern
v souboru Source2.c zviditelní "i".
func
Ve funkci se adresa globální proměnné i
používá k inicializaci static
proměnné external_i
ukazatele . To funguje, protože globální proměnná má static
životnost, což znamená, že její adresa se během provádění programu nemění. Dále je proměnná i
definována v rámci oboru func
jako místní proměnná s počáteční hodnotou 16. Tato definice nemá vliv na hodnotu externí úrovně i
, která je skryta použitím svého názvu pro místní proměnnou. Hodnota globální i
hodnoty je nyní přístupná pouze prostřednictvím ukazatele external_i
.
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro